मैंने कुछ बार उपयोग किया है। वास्तव में, यह एक मैनुअल git rebase -i
है और यह तब उपयोगी होता है जब आप स्क्वैशिंग या उनमें से कुछ को विभाजित करने सहित कई कामों को पुनर्व्यवस्थित करना चाहते हैं। मुख्य लाभ यह है कि आपको एक ही पल में हर प्रतिबद्ध की नियति के बारे में फैसला नहीं करना है। रिबेस के विपरीत प्रक्रिया के दौरान आपके पास सभी गिट सुविधाएं भी उपलब्ध होंगी। उदाहरण के लिए, आप किसी भी समय मूल और पुनर्लेखित इतिहास दोनों का लॉग प्रदर्शित कर सकते हैं, या यहां तक कि एक और rebase भी कर सकते हैं!
मैं निम्नलिखित तरीके से करता पर गौर करेंगे, तो यह आसानी से पढ़ने योग्य है:
C# good commit after a bad one
B # bad commit
A # good commit before a bad one
शुरुआत में आपका इतिहास इस तरह दिखता है:
x - A - B - C
| |
| master
|
origin/master
हम करने के लिए इसे पुन: करेंगे इस तरह से:
x - A - B*- C'
| |
| master
|
origin/master
यह प्रक्रिया है:
git checkout B # get working-tree to the state of commit B
git reset --soft A # tell git that we are working before commit B
git checkout -b rewrite-history # switch to a new branch for our alternative history
git add
(git add -i
, git stash
इत्यादि) का उपयोग करके अपनी पुरानी प्रतिबद्धता में सुधार करें। आप अपनी पुरानी प्रतिबद्धता को दो या दो से भी विभाजित कर सकते हैं।
git commit # recreate commit B (result = B*)
git cherry-pick C # copy C to our new branch (result = C')
मध्यवर्ती परिणाम:
x - A - B - C
| \ |
| \ master
| \
| B*- C'
| |
| rewrite-history
|
origin/master
आइए खत्म:
git checkout master
git reset --hard rewrite-history # make this branch master
यह है कि, अब आप अपनी प्रगति push
कर सकते हैं।
कृपया स्पष्ट करें कि क्या आप उन 2 प्रतिबद्धताओं को 1 प्रतिबद्धता में जोड़ना चाहते हैं या यदि आप प्रत्येक को और परिवर्तनों में संशोधन करना चाहते हैं। –
मैंने इस सटीक उद्देश्य के लिए एक बैश स्क्रिप्ट बनाई है: github.com/colinodell/git-amend-old एक बार इंस्टॉल हो जाने पर, आप इसका उपयोग इस तरह करेंगे: 'git amend-old abcd123', जहां 'abcd123' पुराना है प्रतिबद्ध है कि आप अपने चरणबद्ध परिवर्तनों में संशोधन करना चाहते हैं। उम्मीद है कि किसी को यह उपयोगी लगेगा! –
@ कॉलिनो 'अपनी स्क्रिप्ट चट्टानों को डेल करें! धन्यवाद। – MikeSchinkel