कहें कि मैंने कुछ समय पहले < सुविधा.c > पेश किया था और अब ध्यान दें कि यह मेरी main
शाखा का हिस्सा नहीं बल्कि एक शाखा feature
का हिस्सा नहीं होना चाहिए था। क्या इसका उपयोग करना संभव है उदा। git-filter-branch
शाखा में main
शाखा से बाहर सभी < सुविधा.c > का इतिहास स्वचालित रूप से स्थानांतरित करने के लिए git-filter-branch
?गिट: कुछ फ़ाइलों का एक अलग शाखा में विभाजित इतिहास
उत्तर
ऐसा लगता है जैसे आप कुछ पागल कर रहे हैं! :)
उसने कहा, मुझे कुछ विकल्प दिखाई देते हैं, जिनमें से कोई भी विशेष रूप से स्वचालित नहीं है।
आप उस फ़ाइल को वर्तमान के साथ प्रतिबद्ध के लिए ढेर मिल गया है, तो बस गलती स्वीकार, एक नई शाखा अपने सिर से दूर है, और जब तक वे स्थिर हो आगे कहा कि शाखा में डाल दिया है कि सुविधा के साथ करता है । यदि आप रेपो साझा कर रहे हैं, तो यह एकमात्र वास्तविक विकल्प बन जाता है। कोई भी अलग इतिहास नहीं लेना चाहता, खासकर यदि उस सुविधा को इतिहास में गहराई से किया गया था।
यदि आप केवल 10 या उससे भी कम बात कर रहे हैं जो वास्तव में उस फ़ाइल को छुआ है, और वे हाल ही में कई अन्य प्रतिबद्धताओं के बिना प्रतिबद्ध हैं, तो आप हेड पर एक नई शाखा देख सकते हैं और शाखा को वापस कर सकते हैं आप फीचर को जोड़ने से पहले इस फीचर को वापस नहीं चाहते हैं, और उसके बाद चेरी चुनने की सुविधा आपको फीचर शाखा से बाहर करनी चाहिए जबतक कि आप उन्हें बाद में किसी भी तारीख में प्रतिबद्ध करने के लिए तैयार न हों।
आप इतिहास के एक टन के साथ काम कर रहे हैं, interleaved के बहुत करता है, और तुम सच में उस सुविधा मौजूद है करने के लिए बिल्कुल, आप ऊपर एक छोटे से खोल स्क्रिप्ट है कि उत्पादन लेता लिख सकता है नहीं करना चाहती
git log
और चेरी इसे एक नई शाखा में चुनता है। की तर्ज पर कुछ:$ cd git-repo $ git checkout -b feature-x $ the-perfect-shell-script `git log --pretty=format:"%H" path/to/feature.c`
एक बार जब आप प्रतिबद्ध चेरी बाहर उठाया के सभी के साथ कि सुविधा शाखा है, तो आप तो
git filter-branch
उपयोग कर सकते हैं प्रतिबद्ध संदर्भ जो उस फ़ाइल के सभी बाहर फिल्टर करने के लिए। man page का एक साधारण उदाहरण है जो वास्तव में करता है।एक बार जब आप इसे प्राप्त कर लेंगे, तो आप
git rebase feature-x --onto <filtered-branch>
कर सकते हैं और आपको जाने के लिए अच्छा होना चाहिए।बेशक इसे काफी हतोत्साहित किया जाना चाहिए, खासकर अगर प्रकाशित किया गया है तो प्रकाशित किया गया है।
ठीक है, यहाँ मेरी जाने है:
था मैं <feature.c> नहीं जोड़ तोड़ करता है, मैं <feature.c> के पहले प्रतिबद्ध और उसके बाद में git log
साथ git cherry-pick
इस्तेमाल किया से की शाखाओं किया जा सकता था एक लूप, suggestedTim Visher द्वारा। मास्टर से शुरू मुझे लगता है कि यह काम करना चाहिए:
#!/bin/bash
# create the feature branch starting from feature.c's first commit
FIRSTCOMMIT=$(git log --pretty=format:"%H" feature.c | tail -n1)
git checkout -b feature $FIRSTCOMMIT
# find all commits concerning feature.c...
for i in $(git log feature..master --reverse --pretty=format:"%H" feature.c)
do
# ... cherry-pick them ...
git cherry-pick $i
# ... and copy ONE modified tag of it if existing
git describe --tags --exact-match $i && xargs taghelperscript
done
# now eliminate feature.c from master
git filter-branch --prune-empty --tag-name-filter "cat" --index-filter 'git rm --cached --ignore-unmatch feature.c' $FIRSTCOMMIT..master
taghelperscript
के साथ किया जा रहा git tag prefix.$1
की तरह कुछ (शायद यह बेहतर किया जा सकता है?)। टैगिंग भाग शायद मेरे द्वारा उपयोग किए जाने वाले हल्के टैग के लिए ही काम करता है। यह भी सलाह दीजिये कि < सुविधा के साथ यह काम नहीं करता है।सी > का नाम किसी बिंदु पर बदल दिया गया है, और यदि यह प्रारंभिक प्रतिबद्धता में पहले से मौजूद है तो यह दो अलग-अलग इतिहास, या (मेरा अनुमान) master
में एक प्रतिबद्धता का कारण बन सकता है जिसमें < सुविधा.c > का विलोपन शामिल है बाद में एक विलय संघर्ष या भ्रम।
मुसीबत है, मेरे प्रतिबद्ध में से कुछ इस प्रकार git cherry-pick
एक अनसुलझे मर्ज को गति प्रदान करने के कारण अन्य फ़ाइलों को संशोधित, या इन अन्य फ़ाइलों परिचय देता है। तो इसके बजाय, मैं कुछ git filter-branch
जादू का प्रयास करूंगा। बाद में । रहो रहें ...
- 1. गिट: एक अलग स्थानीय शाखा
- 2. एक अलग गिट शाखा
- 3. एक अलग इतिहास समयरेखा
- 4. एक गिट शाखा दो शाखाओं में विभाजित करें?
- 5. पिछली एन गिट को एक अलग शाखा
- 6. क्या शाखा प्रमुखों का गिट रिकॉर्ड इतिहास है?
- 7. गिट: एक निश्चित लेखक द्वारा एक अलग शाखा में सभी कामों को कैसे रीबेस करें?
- 8. Git: एक अलग शाखा
- 9. गिट - एक अलग भंडार से शाखा को मर्ज करें
- 10. गिट इतिहास
- 11. गिट इतिहास
- 12. गिट - एक फ़ाइल का इतिहास दिखाओ?
- 13. गिट मास्टर शाखा में
- 14. एक शाखा में गिट क्लोन
- 15. गिट शाखा मास्टर शाखा
- 16. गिट एक और शाखा
- 17. संदर्भ गिट शाखा
- 18. गिट इतिहास में फ़ाइलों से टेक्स्ट को कैसे प्रतिस्थापित करें?
- 19. अलग-अलग शाखाओं में एक गिट भंडार में फ़ोल्डर्स को विभाजित करें
- 20. फ़ाइल को विभाजित करते समय गिट इतिहास रखें
- 21. गिट: क्या प्रति-शाखा टैग की तरह कुछ है?
- 22. एक बहु-डेवलपर गिट वर्कफ़्लो, एक स्वच्छ इतिहास बनाए रखने
- 23. गिट शाखा (कोई शाखा नहीं)
- 24. गिट केवल एक शाखा से फ़ाइलों को हटाएं
- 25. गिट शाखा सर्वश्रेष्ठ प्रथाओं का नामकरण
- 26. गिट - फ़िल्टर-शाखा
- 27. एक SVN शाखा
- 28. गिट - प्रत्येक शाखा के लिए अलग फ़ोल्डर। यह की स्थापना
- 29. गिट अद्यतन एक अप्रयुक्त शाखा
- 30. गिट - अलग-अलग स्थानीय निर्देशिकाओं में स्टोर शाखाएं
सौभाग्य से कुछ भी प्रकाशित नहीं हुआ है, फीचर-ब्रांचिंग का मेरा विचार "_before_ publishing" पर विचार करना है -फेज :) इसलिए मैं कोशिश करूंगा 3. –
+1 ' खोल-स्क्रिप्ट 'गिट लॉग --pretty = प्रारूप: "% एच" पथ/से/feature.c''। मेरे विचार के लिए [मेरा खुद का जवाब] देखें (http://stackoverflow.com/questions/4278264/git-split-history-of-some-files-into-a-separate-branch/4283970#4283970) इसके बारे में मेरे विचार के लिए –
'गिट लॉग ...' में से कोई भी 'गिट रेव-लिस्ट मास्टर - फीचर.c' का उपयोग कर सकता है –