গিট: কমিটকে রিভার্স-মার্জ করবেন কীভাবে?


124

এসভিএন দিয়ে কোনও প্রতিশ্রুতি রিভার্স-মার্জ করা সহজ, তবে গিটের সাথে এটি কীভাবে করবেন?



আমি মনে করি না এটিই প্রশ্নটি দ্বারা বোঝানো হয়েছে। এসভিএন-এ একটি বিপরীত সংশ্লেষ কমিট থেকে স্থানীয় পরিবর্তনগুলিতে পরিবর্তনগুলিও ফিরিয়ে দেয়, তাই আপনি এগুলি সম্পাদনা করতে এবং আবার প্রতিশ্রুতিবদ্ধ করতে পারেন।
অলস

উত্তর:


105

একটি নতুন প্রতিশ্রুতি তৈরি করতে যা অতীতের প্রতিশ্রুতিগুলির পরিবর্তনগুলিকে 'পূর্বাবস্থায়' ফেলে দেয়:

$ git revert <commit>

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


31
কোন পরিবর্তনটি প্রত্যাবর্তন -m <parent number>করতে হবে git revertতা নির্দিষ্ট করার জন্য আপনাকে সম্ভবত বিকল্প সরবরাহ করতে হবে। আপনি যদি অপ্রকাশিত ইতিহাসের মার্জটিকে পূর্বাবস্থায় ফেরাতে চান তবে ব্যবহার করুন git reset --hard HEAD^1
জাকুব নারেবস্কি

3
জাকুব: আপনি যদি মার্জ কমিটকে ফিরিয়ে দিচ্ছেন তবে এটি সত্য, তবে সাবভার্সন পরিভাষায় "রিভার্স-মার্জ" আসলে কোনও প্রকার প্রতিশ্রুতি ফিরিয়ে দেওয়ার নাম।
বেন জেমস

4
মনে রাখবেন যে ব্যবহার না করার -mঅর্থ আন-মার্জ হওয়া শাখা থেকে ভবিষ্যতের একত্রীকরণটি সেই মার্জ হওয়ার আগে থেকে পরিবর্তনগুলি অন্তর্ভুক্ত করবে না! আন-মার্জ হওয়া শাখাকে পুনরায় মার্জ করার উপযুক্ত উপায়গুলির জন্য schacon.github.com/git/howto/revert-a-faulty- विस.txt দেখুন ।
মার্টিজন পিটারস

125

প্রত্যাবর্তন করার জন্য একটি একত্রীকরণ কমিট, আপনি ব্যবহার করতে প্রয়োজন: git revert -m <parent number>। সুতরাং উদাহরণস্বরূপ, ১ নম্বর ব্যবহার করে পিতামাতাকে ব্যবহার করে সাম্প্রতিকতম মার্জ কমিটকে ফিরিয়ে আনতে:

git revert -m 1 HEAD

শেষ প্রতিশ্রুতি দেওয়ার আগে মার্জ কমিটিকে পূর্বাবস্থায় ফেরাতে, আপনি যা করবেন:

git revert -m 1 HEAD^

git show <merge commit SHA1>পিতামাতাকে দেখতে ব্যবহার করুন , নম্বরগুলি ক্রমগুলি প্রদর্শিত হয় যেমন তারাMerge: e4c54b3 4725ad2

গিট একীভূত ডকুমেন্টেশন: http://schacon.github.com/git/git-rc.html

গিট মার্জ আলোচনা (বিভ্রান্তিকর তবে খুব বিস্তারিত): http://schacon.github.com/git/howto/revert-a-faulty- विस.txt


36
আপনি কীভাবে পিতামাতার সাথে যুক্ত 'নম্বর' পেতে পারেন? শাখাগুলির কোনও স্বতন্ত্র সংখ্যা 'আইডি' রয়েছে?
দানিয়ালজাদে

7
git show <merge commit SHA1>পিতামাতাদের দেখতে ব্যবহার করুন , নম্বরটি তাদের প্রদর্শিত ক্রম যেমনMerge: e4c54b3 4725ad2
অতিমানবিক

8
উদাহরণ: git revert -m 1 SHA1এই আদেশটি আমার পক্ষে একীভূত প্রতিশ্রুতি ফিরিয়ে আনার জন্য কাজ করেছিল যা মাথার আগে বেশ কয়েকটি মার্জ কমিট ছিল এবং নীচে অনেক কমিট ছিল।
সি.পলজোন

3
E4c54b3 বা 4725ad2 কোনটি?
ডলফিন

1
গিট শোয়ের ফলাফল পিতামাতার সংখ্যার সাথে কীভাবে সম্পর্কিত তা এখনও এটি পর্যাপ্ত তথ্য সরবরাহ করে না। "অর্ডার তারা প্রদর্শিত হয়" 1 ভিত্তিক? 0 ভিত্তিক? এই উদাহরণে বিশেষভাবে, পিতামাতার 1 এর SHA1 কী? e4c54b3 বা 4725ad2?
কাপলিনেটর

4

আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি একটি করার কথা বলছেন

svn merge -rn:n-1

কোনও পূর্বের প্রতিশ্রুতি থেকে বেরিয়ে আসার জন্য, এক্ষেত্রে আপনি সম্ভবত সন্ধান করছেন

git revert

0
git reset --hard HEAD^ 

মার্জ পরিবর্তনগুলি ফিরিয়ে নিতে উপরের কমান্ডটি ব্যবহার করুন।


3
এটি মার্জ কমিটিকে দূরে সরিয়ে দেয়, যা মূল পোস্টার যা বলছে তা করে না। পূর্ববর্তী পরিবর্তনগুলি পূর্বাবস্থায় মুছে ফেলার জন্য ওপি বিপরীত প্যাচ করার চেষ্টা করছে।

-1

আপনি যদি প্রতিশ্রুতিবদ্ধ না করতে চান বা পরে প্রতিশ্রুতিবদ্ধ না করতে চান (প্রতিশ্রুতি বার্তাটি এখনও আপনার জন্য প্রস্তুত থাকবে, যা আপনি সম্পাদনা করতে পারেন):

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