मैं समझता हूं कि यह कई परिदृश्यों के लिए एक बुरा विचार है। मैं गिट सीख रहा हूं और प्रयोग कर रहा हूं। इस अभ्यास में कोई कोड नुकसान नहीं पहुंचाएगा।गिट में प्रतिबद्ध संदेशों का नाम कैसे बदलें?
मैं इस तरह एक संरचना बनाई है:
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
|
| * [59e643e] (branch_2b) branch 2b
|/
|/
| * [0f4c880] (branch_2_a) branch 2a
|/
|/
* [a74eb2a] checkout 1
* [9a8dd6a] added branch_2 line
|
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
अब मैं इस ग्राफ के माध्यम से जाने के लिए और विभिन्न प्रतिबद्ध नाम बदलने ताकि वे समझ बनाने के लिए चाहते हैं।
उदाहरण के लिए:
* | [a74eb2a] checkout 1
* | [9a8dd6a] added branch_2 line
renamed to:
* | [a74eb2a] branch 2 commit 2
* | [9a8dd6a] branch 2 commit 1
ध्यान दें कि:
[cf0149e] (HEAD, branch_2) more editing
[59e643e] (branch_2b) branch 2b
[0f4c880] (branch_2_a) branch 2a
सभी शाखाओं कर रहे हैं बाहर की:
[a74eb2a] checkout 1
मैं
git rebase -i 328454f
के साथ प्रयोग किया गया है 363,210
तो बदलते प्रतिबद्ध है कि मैं संशोधित करने के लिए और बाद में
git commit --amend -m "the new message"
चल के रूप में रिबेस प्रक्रिया जारी रखा चाहते थे पर करने के लिए "संपादित करें" "लेने"।
इस दृष्टिकोण के साथ समस्या यह है कि, अंतिम git rebase --continue
के बाद मैं उस शाखा पर दो नए कामों (दो नामों का डुप्लीकेट) नाम बदलना चाहता था।
* [cf0149e] (HEAD, branch_2) more editing
* [8fcc106] some edit
* [3ff23f0] branch 2 commit 2
* [2f287a1] branch 2 commit 1
|
| * [59e643e] (branch_2b) branch 2b
| /
|/
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
|
| * [bb903de] (branch_3) branch 3
|/
|
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
दूसरे शब्दों में मैं अब प्रतिबद्ध है कि ठीक उसी कोड राज्य का प्रतिनिधित्व के दो सेट है: उदाहरण के लिए, अगर मैं रिबेस भाग गया, जबकि हेड "branch_2" पर था ग्राफ कुछ इस तरह लग सकता है।
मैं बस इतना करना चाहता था कि प्रतिबद्ध संदेश बदल दें।
मैं "परीक्षण" से शुरुआती संदेश का नाम बदलना चाहता हूं जैसे "प्रारंभिक संस्करण"। मुझे git commit --amend -m "Initial version"
के साथ ऐसा प्रतीत नहीं होता है क्योंकि अगर मैं चेकआउट करता हूं तो मैं हेडलेस मोड में एंड-अप करता हूं।
मैं क्या गलत कर रहा हूं? निश्चित रूप से यह मुश्किल नहीं हो सकता है।
संपादित करें:
यहां एक दृष्टिकोण है जिसे मैंने अभी काम करने की कोशिश की है। बेशक, यह इतिहास फिर से लिखता है। तो, बहुत विशेष मामलों के बाहर यह एक बुरा विचार है। यहां दिए गए कदम हैं:
शाखा को संशोधित करने के लिए चेकआउट करें। पैच फ़ाइलें बनाएँ:
git format-patch HEAD~x // Where x is how far back from HEAD you need to patch
संपादित पैच फ़ाइलें प्रतिबद्ध संदेश बदलने के लिए। अब सिर को रीसेट करें।
git reset --hard HEAD~x // Same x as before
पैच लागू करें:
git am 000*
न्यू प्रतिबद्ध नई SHA1 के साथ बनाया जाएगा। यदि किसी भी शाखा को अब सही संदेशों के साथ नए कामों का संदर्भ देने की आवश्यकता है तो आपको उन्हें स्थानांतरित करने के लिए git rebase
का उपयोग करना होगा।
इस के साथ पैच प्रक्रिया मैं समाप्त हो गया-अप लागू करने के बाद अपने ही उदाहरण का उपयोग करने के लिए,:
* [7761415] (HEAD, branch_2) branch 2 commit 4
* [286e1b5] branch 2 commit 3
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| | * [0f4c880] (branch_2_a) branch 2a
| |/
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
तो, मैं अपने branch_2 अच्छी तरह से लेबल करता है। अब मैं branch_2a स्थानांतरित करने के लिए इतना है कि यह [53d638c] branch 2 commit 2
चेकआउट branch_2a से बाहर शाखाओं
git checkout branch_2a
यह रिबेस
git rebase 53d638c
चाहते अब मेरे पास है:
* [fb4d1c5] (HEAD, branch_2a) branch 2a
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [59e643e] (branch_2b) branch 2b
| * [a74eb2a] checkout 1
| * [9a8dd6a] added branch_2 line
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
के साथ भी यही प्रक्रिया शाखा_2b में परिणाम:
* [ca9ff6c] (HEAD, branch_2b) branch 2b
| * [fb4d1c5] (branch_2a) branch 2a
|/
| * [7761415] (branch_2) branch 2 commit 4
| * [286e1b5] branch 2 commit 3
|/
* [53d638c] branch 2 commit 2
* [52f82f7] branch 2 commit 1
| * [bb903de] (branch_3) branch 3
|/
| * [674e08c] (branch_1) commit 1
| * [7d3db01] added branch_1 line
|/
* [328454f] (0.0.0) test
जो वही है जो मैं ढूंढ रहा था। बहुत गन्दा नहीं है। दोबारा, ऐसा कुछ नहीं जो आप बहुत विशेष मामलों के बाहर करना चाहते हैं। मेरे मामले में मैं सिर्फ गिट सीखने के लिए खेल रहा हूं, इसलिए उपर्युक्त वास्तव में वास्तविक कोड भंडार को प्रभावित नहीं कर रहा है। यह जानना अच्छा है कि अगर आपको करना है तो आप ऐसा कर सकते हैं।
अब पहली प्रतिबद्धता का नाम बदलने के लिए।
आप नहीं कर सकते। गिट सर्वर-उन्मुख नहीं माना जाता है। यदि आप इसे कहीं और धक्का देते हैं, तो यह है। –
आप अपनी शाखाओं के उन अच्छे आरेखों को कैसे प्राप्त करते हैं? क्या वह एक गिट कमांड था या आपने इसे ASCII का उपयोग करके बाहर निकाला था? –