git - কেন গিট একটি অনুপস্থিত-এম বিকল্প সম্পর্কে অভিযোগ ফিরে?




github git-revert (4)

ডিফল্ট git revert দ্বারা আসলে একটি অর্থ একত্রিত করতে প্রত্যাখ্যান করে যা প্রকৃতপক্ষে অর্থহীন। আমি আপনার HEAD আসলে একটি মার্জ কমিট যে অনুমান।

আপনি যদি মার্জ কমিটটি ফিরিয়ে আনতে চান তবে আপনাকে ম্যারেজের কোন অভিভাবকটি প্রধান ট্রাঙ্ক হিসাবে বিবেচনা করতে চান তা উল্লেখ করতে হবে, অর্থাৎ আপনি যা প্রত্যাবর্তন করতে চান।

প্রায়শই এটি পিতা-মাতা নম্বর হতে পারে, উদাহরণস্বরূপ, যদি আপনি master এবং git merge unwanted এবং তারপর git merge unwanted করার সিদ্ধান্ত নেয়। প্রথম পিতামাতা আপনার প্রি-মার্জ master শাখা হতে হবে এবং দ্বিতীয় পিতামাতা unwanted টিপ হবে।

এই ক্ষেত্রে আপনি করতে পারেন:

git revert -m 1 HEAD

তাই আমি অন্য লোকেদের সাথে একটি প্রকল্পে কাজ করছি, এবং একাধিক গীথাব ফার্ক কাজ করছে। কেউ শুধু একটি সমস্যার জন্য একটি ফিক্স তৈরি করে এবং আমি তার কাঁটা দিয়ে মার্জ, কিন্তু তারপর আমি বুঝতে পারলাম যে আমি একটি ভাল সমাধান খুঁজে পেতে পারে। আমি শুধু তৈরি কমিট প্রত্যাবর্তন করতে চান। আমি git revert HEAD দিয়ে এটি করার চেষ্টা করেছি কিন্তু এটি আমাকে এই ত্রুটিটি দিয়েছে:

fatal: Commit <SHA1> is a merge but no -m option was given.

ওটার মানে কি? যখন আমি একত্রিত এবং প্রতিশ্রুতিবদ্ধ, আমি -m বিকল্পটি "ব্যবহারকারীর সাথে যুক্ত করা"> বলার জন্য ব্যবহার করেছি।

আমি এখানে কি ভুল করছি?


বলুন অন্য লোকটি foo এর উপরে বার তৈরি করেছেন, কিন্তু আপনি ইতিমধ্যে বিজ তৈরি করেছেন এবং তারপরে একত্রিত হয়ে ইতিহাসটি দিয়েছেন

$ git lola
*   2582152 (HEAD, master) Merge branch 'otherguy'
|\  
| * c7256de (otherguy) bar
* | b7e7176 baz
|/  
* 9968f79 foo

দ্রষ্টব্য: গিট লোলা একটি অ-মানক কিন্তু দরকারী উপনাম।

git revert সঙ্গে কোন পাশা:

$ git revert HEAD
fatal: Commit 2582152... is a merge but no -m option was given.

চার্লস বেইলি স্বাভাবিক হিসাবে একটি চমৎকার উত্তর দিয়েছেন। git revert ব্যবহার হিসাবে git revert

$ git revert --no-edit -m 1 HEAD
[master e900aad] Revert "Merge branch 'otherguy'"
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 bar

কার্যকরভাবে bar মুছে ফেলা এবং একটি ইতিহাস উত্পন্ন

$ git lola
* e900aad (HEAD, master) Revert "Merge branch 'otherguy'"
*   2582152 Merge branch 'otherguy'
|\  
| * c7256de (otherguy) bar
* | b7e7176 baz
|/  
* 9968f79 foo

কিন্তু আমি আপনাকে মার্জ কমিট নিক্ষেপ করতে চান সন্দেহ:

$ git reset --hard HEAD^
HEAD is now at b7e7176 baz

$ git lola
* b7e7176 (HEAD, master) baz
| * c7256de (otherguy) bar
|/  
* 9968f79 foo

হিসাবে git rev-parse ম্যানুয়াল নথিভুক্ত

<rev>^ , যেমন HEAD ^, v1.5.1^0
একটি পুনর্বিবেচনা প্যারামিটারে একটি যথোপযুক্ত সৃষ্টিকর্তা মানে সেই বস্তুটির প্রথম অভিভাবক। ^<n> অর্থ n- র্থ পিতা ( অর্থাত্ <rev>^ <rev>^1 সমতুল্য)। একটি বিশেষ নিয়ম হিসাবে, <rev>^0 অর্থটি নিজেই সংঘটিত হয় এবং যখন <rev> একটি ট্যাগ অবজেক্টের বস্তু নাম যা একটি কমিট অবজেক্টকে বোঝায়।

তাই git reset চালানোর আগে, HEAD^ (বা HEAD^1 ) b7e7176 ছিল এবং HEAD^2 c7256de ছিল, অর্থাৎ , মজুরী কমিটির প্রথম এবং দ্বিতীয় পিতামাতা যথাক্রমে।

git reset --hard সঙ্গে সতর্কতা অবলম্বন করা - কারণ এটি কাজ ধ্বংস করতে পারেন।


আমার এই সমস্যা ছিল, সমাধানটি গ্রাফকে দেখতে (gitk ব্যবহার করে) দেখতে এবং আমার নিম্নলিখিতটি দেখতে ছিল:

*   commit I want to cherry-pick (x)
|\  
| * branch I want to cherry-pick to (y)
* | 
|/  
* common parent (x)

আমি এখন যে আমি বুঝতে চাই

git cherry-pick -m 2 mycommitsha

এটি কারণ -m 1 সাধারণ পিতামাতার উপর ভিত্তি করে একত্রিত হবে যেখানে- -m 2 শাখা Y- এর উপর ভিত্তি করে মার্জ, যা আমি চেরি-বেছে নিতে চাই।


ম্যাট ভয় থেকে উত্তরের সবচেয়ে কার্যকর আইএমএইচও ছিল। উইন্ডোজগুলির জন্য কেবলমাত্র একটি পাওয়ারশেল স্ক্রিপ্ট কেবল তাদের গিট রেপো থেকে ফাইলগুলি সরিয়ে ফেলার জন্য যা তাদের বর্জন তালিকার সাথে মেলে।

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git 
$ignoreFiles | % { git rm $_}

git add .




git github git-revert