বিটবাকেটে শেষ প্রতিশ্রুতি মুছুন


103

আমি একটি ভুল করেছি এবং কীভাবে আমার সর্বশেষ পুশটি সংগ্রহস্থলটিতে মুছতে হয় তা আমি জানি না। আমি অ্যাপ্লিকেশনটির সর্বশেষ আপডেটগুলি টানছি তবে এতে দ্বন্দ্ব রয়েছে এবং আমি এটিকে সংগ্রহস্থলে রাখি।

আমার শেষ প্রতিশ্রুতিটি কীভাবে মুছবেন? বা কীভাবে এটি ঠিক করবেন?

উত্তর:


102

প্রথমত, আপনি যদি একই কোড ভান্ডারে অন্যান্য লোকের সাথে কাজ করছেন, আপনার কোনও প্রতিশ্রুতি মুছে ফেলা উচিত নয় যেহেতু আপনি যখন ভাণ্ডারটিতে আপডেটটি চাপিয়ে দেবেন তখন এটি আপনার সহকর্মীদের স্থানীয় ভান্ডারগুলিকে একটি অবৈধ অবস্থায় ফেলে রাখবে (যেমন তারা যদি আপনি মুছে ফেলার পরে কমিট করেছেন, সেই কমিটগুলি অবৈধ হবে যেহেতু সেগুলি এখন অস্তিত্বহীন প্রতিশ্রুতি ভিত্তিক ছিল)।

বলেছিলেন, আপনি যা করতে পারেন তা কমিটকে ফিরিয়ে দেওয়া । আপনি যে সিভিএস ব্যবহার করছেন তার উপর নির্ভর করে এই পদ্ধতিটি আলাদাভাবে (বিভিন্ন কমান্ড) করা হয়:

গিট উপর :

git revert <commit>

উপর তত্পর :

hg backout <REV>

সম্পাদনা: রিভার্ট অপারেশন একটি নতুন প্রতিশ্রুতি তৈরি করে যা প্রত্যাবর্তিত প্রতিশ্রুতির চেয়ে বিপরীত হয় (উদাহরণস্বরূপ যদি মূল প্রতিশ্রুতি একটি লাইন যুক্ত করে, তবে রিভার্ট কমিট সেই লাইনটি মুছে দেয়), কার্যকরভাবে সংগ্রহস্থলের ইতিহাস পুনর্লিখন না করে অনাকাঙ্ক্ষিত কমিটের পরিবর্তনগুলি সরিয়ে দেয়।


তথ্যের জন্য ধন্যবাদ. এবং আমি পরিণতিটি জানি যদি আমি প্রতিশ্রুতি মুছে ফেলি তবে আমি কীভাবে আমার ক্রিয়াকলাপটি পূর্বাবস্থায়িত করতে পারি তা জানি না কারণ এটি আমার প্রথমবারের মতো ভুল হয়ে গেছে। আমার প্রতিশ্রুতিটি পূর্বাবস্থা করা দরকার কারণ সিস্টেমটি ইতিমধ্যে লাইভ। আমরা কেবল দুজন যারা সেই সংগ্রহস্থল নিয়ে কাজ করছি।
ক্যাথরিন

git backout <REV>? বা: hg backout <REV>?
আরমান্ডো পেরেজ মার্কেজ

তবে যদি পুনঃস্থাপনের পরে যুক্ত করা কমিটগুলি লাইনটি মুছে ফেলার পরিবর্তনে পরিবর্তন করে থাকে?
রাহস

@ রাহুলসাহা যেহেতু আপনি যা করছেন তা মূলত শাখায় একটি অঙ্গীকারকে একীভূত করার চেষ্টা করছেন, আমি দৃ it়ভাবে নিশ্চিত যে এটি আপনাকে একটি মার্জ সংঘাত দেবে যা আপনি সমাধান করতে চলেছেন।
এসারম্যাক্স

98

যদি আপনি অন্যের সাথে কাজ না করে থাকেন (বা তাদের উল্লেখযোগ্য বিরক্তির কারণ হিসাবে খুশি হন) , তবে বিটবাকেট শাখা থেকে কমিটগুলি সরিয়ে ফেলা সম্ভব।

আপনি যদি কোনও মাস্টারবিহীন শাখা পরিবর্তন করার চেষ্টা করছেন:

git reset HEAD^               # remove the last commit from the branch history
git push origin :branch_name  # delete the branch from bitbucket
git push origin branch_name   # push the branch back up again, without the last commit

যদি আপনি মাস্টার শাখা পরিবর্তন করার চেষ্টা করছেন

গিটে সাধারণত, মাস্টার শাখাটি বিশেষ নয় - এটি কেবল একটি সম্মেলন। যাইহোক, বিটবাকেট এবং গিথুব এবং অনুরূপ সাইটগুলিতে সাধারণত সেখানে একটি প্রধান শাখা হওয়ার প্রয়োজন হয় (সম্ভবত কোনও ইভেন্টের পরিচালনা করার জন্য আরও কোড লেখার চেয়ে সহজ যে - কোনও নিশ্চিত নেই)। সুতরাং আপনাকে একটি নতুন শাখা তৈরি করতে হবে এবং এটি প্রধান শাখা তৈরি করতে হবে:

# on master:
git checkout -b master_temp  
git reset HEAD^              # undo the bad commit on master_temp
git push origin master_temp  # push the new master to Bitbucket

বিটবকেটে, সংগ্রহস্থল সেটিংসে যান এবং "মেইন ব্রাঞ্চ" master_tempপরিবর্তন করুন (গিথুবে, "ডিফল্ট শাখা" পরিবর্তন করুন)।

git push origin :master     # delete the original master branch from Bitbucket
git checkout master
git reset master_temp       # reset master to master_temp (removing the bad commit)
git push origin master      # re-upload master to bitbucket

এখন বিটবকেটে যান এবং আপনি যে ইতিহাস চান তা দেখতে হবে। আপনি এখন সেটিংস পৃষ্ঠায় যেতে পারেন এবং প্রধান শাখাটি এতে পরিবর্তন করতে পারেন master

এই প্রক্রিয়াটি অন্য যে কোনও ইতিহাসের পরিবর্তনের সাথেও কাজ করবে (উদাঃ git filter-branch)। পুরানো থেকে নতুন ইতিহাস বিচ্ছিন্ন হওয়ার আগে আপনাকে যথাযথ কমিটে পুনরায় সেট করতে হবে তা নিশ্চিত করতে হবে।

সম্পাদনা : আপাতদৃষ্টিতে আপনাকে গিথুবে এই সমস্ত ঝামেলাতে যাওয়ার দরকার নেই, কারণ আপনি রিসেট শাখাকে জোর করে চাপতে পারেন ।

বিরক্তিকর সহযোগীদের সাথে ডিল করা

পরের বার কেউ আপনার সংগ্রহশালা থেকে টানতে চেষ্টা করবে, (যদি তারা ইতিমধ্যে খারাপ প্রতিশ্রুতিটি টানতে থাকে), টানটি ব্যর্থ হবে। পরিবর্তিত ইতিহাসের আগে তাদের ম্যানুয়ালি একটি প্রতিশ্রুতিতে পুনরায় সেট করতে হবে এবং তারপরে আবার টানতে হবে।

git reset HEAD^
git pull

যদি তারা খারাপ প্রতিশ্রুতি টেনে নিয়ে আসে এবং এর উপরে প্রতিশ্রুতিবদ্ধ হয় তবে তাদের পুনরায় সেট করতে হবে এবং তারপরে git cherry-pickতারা যে ভাল প্রতিশ্রুতি তৈরি করতে চায় তা কার্যকরভাবে খারাপ প্রতিশ্রুতি ছাড়াই পুরো শাখাটি পুনরায় তৈরি করতে পারে।

যদি তারা কখনই খারাপ প্রতিশ্রুতি টান না, তবে এই পুরো প্রক্রিয়াটি তাদের প্রভাবিত করবে না এবং তারা স্বাভাবিক হিসাবে টানতে পারে।


1
সোর্স ট্রি ব্যবহার করে আরও স্বাচ্ছন্দ্য বোধকারীদের জন্য: ১) বিটবকেটের জন্য ওয়েব ইউআইতে মূল শাখা পরিবর্তন করতে, রেপো সেটিংসটি দেখুন। 2) ওয়েব ইউআইতে কোনও শাখা মুছতে, শাখাগুলি পৃষ্ঠাতে দেখুন। 3) উপরের অনুযায়ী স্থানীয় রেপো রিসেট করুন। 4) এই শাখাগুলি পুনরায় তৈরি করতে আপনার স্থানীয় পরিবর্তনগুলি ধাক্কা দিন।
রিচার্ড লে ম্যাসুরিয়ার

2
যে কেউ দুর্ঘটনাক্রমে কোনও গোপনীয়তা ঠেলেছে, আমি এই উত্তরটির পুরোপুরি প্রশংসা করেছি। ধন্যবাদ!
টর্কে

48

আপনি পুনরায় সেট করতে পারেন HEAD^তারপরে চাপ দিন push

git reset HEAD^
git push -u origin master --force

এটি আপনার শেষ প্রতিশ্রুতি মুছে ফেলবে এবং কমিট মোছা হিসাবে বিটবাকেটে প্রতিফলিত হবে তবে এখনও তাদের সার্ভারে থাকবে।


গিথুব এটি অনুমতি দেবে, তবে এই লেখার মতোই, বিটবকেট জোর করে চাপ দিতে দেয় না।
জেমসকিউমারফি 18

4
প্রকৃতপক্ষে বিটবাকেটটি কেবল শক্তি প্রয়োগ না করে কেবল অন-ট্র্যাক করা কমিটগুলি সরিয়ে ফেলার পরিবর্তে এটি মুছে ফেলা হিসাবে চিহ্নিত করে।
শুভঙ্কার

বিটবাকেট থেকে প্রস্তাবিত উপায়টি রিভার্ট ব্যবহার করছে। তবে আমি মনে করি আমার ক্ষেত্রে এটি আরও উপযুক্ত। যেহেতু আমি একমাত্র এটি ব্যবহার করছি এবং এটি রিভার্ট ব্যবহারের চেয়ে আরও পরিষ্কার মনে হচ্ছে। ধন্যবাদ।
নাফসাকা

1
হ্যাঁ, এটি এখনও বিটবাকেটে কাজ করে। তুমি শুধু আমাকে বড় সময় বাঁচিয়েছ! আমি আমার Eclipse থেকে একটি প্রতিশ্রুতিবদ্ধ / পুশ করেছি এবং আমার অন্যান্য প্রকল্পের সাথে মিশে গিয়েছি। অংশে গিটে কাজ করার জন্য কমান্ড লাইন এবং অন্তর্নির্মিত গ্রহন উভয় ব্যবহার করে আমার অংশ থেকে খারাপ অনুশীলনের কারণে।
ডার্কসিগনাস

উজ্জ্বল বা সহজ: বর্তমান শাখাটিকে এই প্রতিশ্রুতিতে পুনরায় সেট করুন, তারপরে সেই শক্তি প্রয়োগ করে আমার সমস্যাটি সমাধানের জন্য চাপ দিন
অ্যান্টনি কাল

3

অতীতে গিট রিভার্ট করতে আমার সমস্যা হয়েছিল (মূলত কারণ এটি কীভাবে কাজ করে তা আমি পুরোপুরি নিশ্চিত নই।) একীভূত সমস্যাগুলির কারণে আমার আবার ফিরে আসতে সমস্যা হয়েছিল ..

আমার সহজ সমাধান এটি।

ধাপ 1.

 git clone <your repos URL> .

অন্য প্রকল্পে আপনার প্রকল্প, তারপরে:

ধাপ ২.

git reset --hard <the commit you wanna go to>

তারপর পদক্ষেপ 3।

আপনার সর্বশেষ (এবং মূল) প্রজেক্টের দির (সমস্যাটি যেটি শেষ সমস্যাটি রয়েছে) পদক্ষেপ 2 এর ফাইলগুলি পেস্ট করুন

পদক্ষেপ 4।

git commit -m "Fixing the previous messy commit" 

পদক্ষেপ 5।

উপভোগ করুন


1
কাটা এবং আটকানো সত্যিই অগোছালো। এছাড়াও, এটি প্রশ্ন থেকে সমস্যার সমাধান করবে না।
ড্যানিয়েল লি

1
git revertসহজ: এটি একটি নতুন প্রতিশ্রুতি তৈরি করে যা পূর্ববর্তী প্রতিশ্রুতি (বা একাধিক কমিট) এর পরিবর্তনের বিপরীত করে। এটি কমিটগুলি মুছে দেয় না, সুতরাং এটি এই প্রশ্নের জন্য প্রাসঙ্গিক নয়। এছাড়াও, এখানে ক্লোনিং পদক্ষেপটি সত্যই প্রয়োজনীয় নয়।
nnot101

1
গিট রিভার্ট করা উপরের মতো সমান প্রক্রিয়া।
নাফসাকা

3

এখানে 4 টি ধাপ পর্যন্ত একটি সহজ পদ্ধতির:

0 - আপনি যে দলটিকে সংগ্রহস্থলটি ঠিক করতে চলেছেন তাকে পরামর্শ দিন

দলের সাথে সংযুক্ত হন এবং আসন্ন পরিবর্তনগুলি তাদের জানান।

1 - শেষ প্রতিশ্রুতি মুছে ফেলুন

আপনার লক্ষ্য শাখাটি ধরে নেওয়া master:

$ git checkout master              # move to the target branch
$ git reset --hard HEAD^           # remove the last commit
$ git push -f                      # push to fix the remote

এই মুহুর্তে আপনি কাজ করছেন যদি আপনি একা কাজ করছেন।

2 - আপনার সতীর্থের স্থানীয় ভান্ডারগুলি ঠিক করুন

আপনার সতীর্থের উপর:

$ git checkout master              # move to the target branch
$ git fetch                        # update the local references but do not merge  
$ git reset --hard origin/master   # match the newly fetched remote state

যদি আপনার সতীর্থের কোনও নতুন কমিট না থাকে তবে আপনি এই মুহুর্তে সম্পন্ন হয়ে গেছেন এবং আপনার সিঙ্কে থাকা উচিত।

3 - হারিয়ে যাওয়া কমিটগুলি ফিরিয়ে আনা

আসুন আমরা বলি যে কোনও সতীর্থের একটি নতুন এবং অপ্রকাশিত প্রতিশ্রুতি ছিল যা এই প্রক্রিয়াটিতে হারিয়েছিল।

$ git reflog                       # find the new commit hash
$ git cherry-pick <commit_hash>

প্রয়োজনীয় হিসাবে অনেক কমিটের জন্য এটি করুন।

আমি এই পদ্ধতিটি বহুবার সাফল্যের সাথে ব্যবহার করেছি। সবকিছু সিঙ্ক্রোনাইজ করা হয়েছে তা নিশ্চিত করার জন্য এটির একটি দলের প্রচেষ্টা প্রয়োজন।


2

অন্যরা যেমন বলেছে, সাধারণত আপনি ব্যবহার করতে চান hg backoutবা git revert। তবে, কখনও কখনও আপনি কোনও প্রতিশ্রুতি থেকে মুক্তি পেতে চান rid

প্রথমত, আপনি আপনার সংগ্রহস্থলের সেটিংসে যেতে চাইবেন। Strip commitsলিঙ্কে ক্লিক করুন ।

স্ট্রিপ বিটবাকেট সেটিংসে লিঙ্ক করে

আপনি যে পরিবর্তনটি ধ্বংস করতে চান তার জন্য চেঞ্জসেট আইডি প্রবেশ করুন এবং ক্লিক করুন Preview strip। এটি আপনাকে দেখতে দেবে যে আপনি এটি করার আগে আপনি কী ধরণের ক্ষতি করতে চলেছেন। তারপরে কেবল ক্লিক করুন Confirmএবং আপনার প্রতিশ্রুতিবদ্ধতা আর ইতিহাস নয়। নিশ্চিত হয়ে নিন যে আপনি কী করেছেন তা আপনার সমস্ত সহযোগীদের জানিয়ে দিয়েছেন, যাতে তারা ঘটনাক্রমে আক্রমণাত্মক প্রতিশ্রুতি ফিরিয়ে দেয় না।


এটি কোন সংস্করণ, এবং কোন অনুমতি প্রয়োজন? এটি v6.4.3 এ দেখতে অন্যরকম দেখাচ্ছে যা আমি দেখছি এবং এই আইটেমটি সেখানে নেই। আমি আছি সংগ্রহস্থলের অ্যাডমিন।
রাফেল

1

পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ হওয়ার পরে এটি মুছতে সক্ষম হবে না। কারণ প্রতিশ্রুতিবদ্ধ মৌলিক প্রকৃতি মুছে ফেলা হয় না।

আপনি যে কাজটি করতে পারবেন (সহজ এবং নিরাপদ পদ্ধতি),

ইন্টারেক্টিভ রিবেস:

1) git rebase -i HEAD~2 # আপনার সাম্প্রতিক 2 টি কমিট প্রদর্শন করবে

2) আপনার প্রতিশ্রুতিবদ্ধতার মতো তালিকা তৈরি হবে, সাম্প্রতিক পৃষ্ঠার নীচে LILO প্রদর্শিত হবে (সর্বশেষে শেষ)

এখানে চিত্র বর্ণনা লিখুন

সম্পূর্ণ কমিট সারিটি পুরোপুরি মুছুন

3) দ্বারা ctrl+Xবা এটি সংরক্ষণ করুনESC:wq

এখন আপনার শাখাটি আপনার শেষ প্রতিশ্রুতি ব্যতীত আপডেট হবে ..


1

ডাস্টিনের দ্বারা উল্লিখিত বিটবকেটের জন্যও আপনি কমান্ডটি লিখতে পারেন :

git push -f origin HEAD^:master

দ্রষ্টব্য: মাস্টার পরিবর্তে আপনি যে কোনও শাখা ব্যবহার করতে পারেন। এবং এটি মুছে ফেলা বিটবুকিটের উপর চাপ দিন।

স্থানীয়ভাবে গিট ব্যবহারে কমিটগুলি অপসারণ করতে:

git reset --hard HEAD~1

0

এখন অবধি, ক্লাউড বিটবাকেট (কোন সংস্করণটি আমি নিশ্চিত নই) নীচে ফাইল সিস্টেম থেকে একটি প্রতিশ্রুতি ফিরিয়ে আনতে দেয় (ক্রোম ব্রাউজারে বিটবকেট ইন্টারফেস থেকে কীভাবে ফিরে যেতে হবে তা আমি দেখতে পাই না)।

আপনি অজান্তে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি সুরক্ষিত করতে আপনার সম্পূর্ণ ডিরেক্টরিটি ব্যাকআপ করুন

চেক আউট ডিরেক্টরি নির্বাচন করুন

ডান মাউস বোতাম: কচ্ছপ গিট মেনু

-রেপো-ব্রাউজার (মেনু অপশন 'রিভার্ট' কেবলমাত্র অনাকাঙ্ক্ষিত পরিবর্তনগুলি পূর্বাবস্থায় ফেলেছে)

হেড বোতাম টিপুন

- উপরের লাইনটি নির্বাচন করুন (শেষ প্রতিশ্রুতি)

ডানদিকের মাউস বোতাম: এই প্রতিশ্রুতি দ্বারা পরিবর্তনটি ফিরিয়ে দিন

- এরপরে এটি ফাইল সিস্টেমে পরিবর্তনগুলি অস্বীকার করে প্রতিশ্রুতিবদ্ধ চাপুন

এই বার্তাটি 'রিভার্ট (আপনার পূর্ববর্তী বার্তা) সহ জিআইটি আপডেট করে with এটি প্রতিশ্রুতি ফিরে আসে

- 'কমিট এবং ধাক্কা' নির্বাচন করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.