অন্যান্য উত্তরগুলি থেকে, আমি কোনও ধরনের git rebase -i
প্রতিশ্রুতি অপসারণের জন্য কীভাবে ব্যবহার করা যেতে পারে সে সম্পর্কে আমি বিভ্রান্ত হয়ে পড়েছিলাম, সুতরাং আমি আশা করি আমার পরীক্ষার কেসটি এখানে (ওপি'র সাথে খুব মিল) লিখে দেওয়া ঠিক হবে।
এখানে একটি bash
স্ক্রিপ্ট রয়েছে যা আপনি /tmp
ফোল্ডারে পরীক্ষার সংগ্রহ তৈরি করতে পেস্ট করতে পারেন :
set -x
rm -rf /tmp/myrepo*
cd /tmp
mkdir myrepo_git
cd myrepo_git
git init
git config user.name me
git config user.email me@myself.com
mkdir folder
echo aaaa >> folder/file.txt
git add folder/file.txt
git commit -m "1st git commit"
echo bbbb >> folder/file.txt
git add folder/file.txt
git commit -m "2nd git commit"
echo cccc >> folder/file.txt
git add folder/file.txt
git commit -m "3rd git commit"
echo dddd >> folder/file.txt
git add folder/file.txt
git commit -m "4th git commit"
echo eeee >> folder/file.txt
git add folder/file.txt
git commit -m "5th git commit"
এই মুহুর্তে, আমাদের file.txt
এই সামগ্রীগুলির সাথে একটি রয়েছে:
aaaa
bbbb
cccc
dddd
eeee
এই মুহুর্তে, হেড 5 তম প্রতিশ্রুতিতে রয়েছে, হেড ~ 1 4 র্থ হবে - এবং হেড ~ 4 হবে প্রথম কমিট (সুতরাং হেড ~ 5 থাকবে না)। ধরা যাক আমরা তৃতীয় প্রতিশ্রুতি মুছে ফেলতে চাই - আমরা এই আদেশটি myrepo_git
ডিরেক্টরিতে জারি করতে পারি :
git rebase -i HEAD~4
( দ্রষ্টব্য যে git rebase -i HEAD~5
"মারাত্মক: একটি একক সংশোধন প্রয়োজন; অবৈধ আপস্ট্রিম হেড ~ 5" এর ফলাফল রয়েছে )) একটি পাঠ্য সম্পাদক ( @ ডেনিসের উত্তরে স্ক্রিনশট দেখুন ) এই বিষয়বস্তুগুলির সাথে খুলবে:
pick 5978582 2nd git commit
pick 448c212 3rd git commit
pick b50213c 4th git commit
pick a9c8fa1 5th git commit
# Rebase b916e7f..a9c8fa1 onto b916e7f
# ...
সুতরাং আমরা আমাদের অনুরোধকৃত হেড ~ 4 এর পর থেকে সমস্ত কমিটগুলি পাই (তবে অন্তর্ভুক্ত নয় )। লাইনটি মুছুন pick 448c212 3rd git commit
এবং ফাইলটি সংরক্ষণ করুন; আপনি এই প্রতিক্রিয়া পাবেন git rebase
:
error: could not apply b50213c... 4th git commit
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
Could not apply b50213c... 4th git commit
এই সময়ে myrepo_git / folder/file.txt
একটি পাঠ্য সম্পাদককে খুলুন ; আপনি দেখতে পাবেন এটি সংশোধিত হয়েছে:
aaaa
bbbb
<<<<<<< HEAD
=======
cccc
dddd
>>>>>>> b50213c... 4th git commit
মূলত, দেখুন git
যে হেড যখন দ্বিতীয় প্রতিশ্রুতিতে আসে তখন aaaa
+ এর বিষয়বস্তু ছিল bbbb
; এবং তারপর এটি যোগ একটি প্যাচ রয়েছে cccc
+ + dddd
যা বিদ্যমান সামগ্রী লিখবেন কিভাবে জানে না।
সুতরাং এখানে git
আপনার জন্য সিদ্ধান্ত নিতে পারে না - আপনিই কে সিদ্ধান্ত নিতে হবে: তৃতীয় প্রতিশ্রুতি সরিয়ে দিয়ে আপনি হয় তা দ্বারা প্রবর্তিত পরিবর্তনগুলি cccc
রাখেন (এখানে, লাইন ) - বা আপনি তা করেন না। যদি তা না হয়, কেবল অতিরিক্ত লাইন অপসারণ - সহ cccc
মধ্যে - folder/file.txt
, একটি টেক্সট সম্পাদক ব্যবহার করে যাতে এটা ভালো দেখায়:
aaaa
bbbb
dddd
... এবং তারপরে সংরক্ষণ করুন folder/file.txt
। এখন আপনি নিম্নলিখিত কমান্ড myrepo_git
ডিরেক্টরিতে ইস্যু করতে পারেন :
$ nano folder/file.txt # text editor - edit, save
$ git rebase --continue
folder/file.txt: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
আহ - তাই চিহ্ন করার যে আমরা দ্বন্দ্ব মীমাংসিত করেছি, আমরা নয় , আগে করছেন :git add
folder/file.txt
git rebase --continue
$ git add folder/file.txt
$ git rebase --continue
এখানে একটি পাঠ্য সম্পাদক আবার খোলে, লাইনটি দেখিয়ে 4th git commit
- এখানে আমাদের কাছে প্রতিশ্রুতি বার্তা পরিবর্তন করার সুযোগ রয়েছে (যা এই ক্ষেত্রে অর্থপূর্ণভাবে পরিবর্তিত হতে পারে 4th (and removed 3rd) commit
বা এর সাথে মিলে যায়)। যাক আপনি চান না - সুতরাং সংরক্ষণ না করে কেবল পাঠ্য সম্পাদক থেকে প্রস্থান করুন; একবার আপনি এটি করেন, আপনি পাবেন:
$ git rebase --continue
[detached HEAD b8275fc] 4th git commit
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
এই মুহুর্তে, এখন আপনার কাছে এমন একটি ইতিহাস রয়েছে (যা আপনি বলতে gitk .
বা অন্যান্য সরঞ্জাম দিয়েও পরিদর্শন করতে পারেন ) মূল বিষয়গুলির folder/file.txt
(দৃশ্যত, অপরিবর্তিত টাইমস্ট্যাম্পগুলি সহ):
1st git commit | +aaaa
----------------------------------------------
2nd git commit | aaaa
| +bbbb
----------------------------------------------
4th git commit | aaaa
| bbbb
| +dddd
----------------------------------------------
5th git commit | aaaa
| bbbb
| dddd
| +eeee
এবং যদি পূর্বে, আমরা লাইনটি রাখার সিদ্ধান্ত নিয়েছিলাম cccc
(তৃতীয় গিট কমিটের বিষয়বস্তু যা আমরা সরিয়ে দিয়েছি), আমাদের থাকতে হবে:
1st git commit | +aaaa
----------------------------------------------
2nd git commit | aaaa
| +bbbb
----------------------------------------------
4th git commit | aaaa
| bbbb
| +cccc
| +dddd
----------------------------------------------
5th git commit | aaaa
| bbbb
| cccc
| dddd
| +eeee
ঠিক আছে, এই ধরণের পড়াটি আমি আশা করি যে আমি খুঁজে পেয়েছি, খাঁজ কাটা শুরু করার জন্য, git rebase
কমিট / রিভিশনগুলি মোছার ক্ষেত্রে কীভাবে কাজ করে; সুতরাং আশা করি এটি অন্যকেও সহায়তা করতে পারে ...