2011-09-26 13 views
11

के बाद सभी को बदल गए गिट इतिहास पर रीबेज करना हमारे गिट रेपो के इतिहास में बड़ी फ़ाइलों का एक गुच्छा है जिसकी अब आवश्यकता नहीं है। मैं का उपयोग कर फिल्टर शाखा तकनीक प्रो Git में विस्तार से बताया उन्हें निकालना चाहते हैं:फ़िल्टर-शाखा

http://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery

मैं तो git push --force all का उपयोग अपने साझा रेपो को यह भेजने के लिए, जैसा कि यहां बताया:

Update a development team with rewritten Git repo history, removing big files

लेकिन। प्रो गिट का कहना है कि मैं इतिहास बदल रहा हूं क्योंकि मुझे हर किसी को रिबेस करना होगा। हमने केवल विलय का उपयोग वैकल्पिक रूप से विलय करने के वैकल्पिक तरीके के रूप में किया है। मैं सबको फिर से क्लोन कर सकता हूं, लेकिन यह एक अंतिम उपाय है; कई देवताओं में स्थानीय शाखाएं होती हैं जो वे रखना चाहते हैं।

तो: नए-बदले गए साझा रेपो पर पुनर्जीवित करने के लिए सभी को हमारे स्थानीय भंडारों में वास्तव में क्या करना होगा? और क्या हमें प्रति ट्रैकिंग शाखा में एक बार ऐसा करना है? हमारे रेपो को मूल के रूप में जाना जाता है और मास्टर शाखा मास्टर है, यदि आप चरण-दर-चरण देना चाहते हैं (और यदि आप चाहें तो मैं इसे प्यार करूंगा)।

उत्तर

3

यहां एक विकल्प है।

  • एक शाखा पर अपने रिबेस मास्टर rebased_master बुलाया बनाएँ (अपने मूल master के बजाय)।
  • आप उस शाखा को धक्का देंगे और आपके सभी डेवलपर्स इसे नीचे खींचेंगे और rebased_master पर अपनी स्थानीय शाखाओं को दोबारा दबाएंगे। अगर वे रीबेज से पहले समकक्ष प्रतिबद्धता को बंद कर देते हैं, और आपके द्वारा निकाली जा रही फ़ाइलों में कोई बदलाव नहीं आया है, तो सभी अच्छी तरह से होना चाहिए।
  • जब सभी लोग rebased_master करने के लिए अपने देव शाखाओं ले जाया गया है, आप अपने मूल master और moverebased_master को master

टिप्पणी को हटा सकते हैं: मैं इस परीक्षण नहीं किया है, तो सुनिश्चित करें कि आप करने के लिए अपने रेपो की एक प्रति है बनाना कुछ गलत होने पर पुनर्स्थापित करें।

+1

यह सही लगता है - वास्तव में काम करने के बाद सुबह में इसे स्वीकार करूँगा! –

+3

तो? क्या यह काम करता है? वह सुबह बीत चुका है मुझे लगता है ... – marton78

14

कुंजी प्रत्येक व्यक्तिगत डेवलपर के लिए master पर अपना मूल संदर्भ खोने के बाद तक नहीं है। ऐसा करने के लिए, उन्हें एक स्थानीय शाखा के लिए मजबूर कर दिया धक्का के बाद एक fetch (नहीं एक पुल) करते हैं, तो क्या ज़रूरत है:

git rebase --onto origin/master master <local_branch> 

यह काम होने पर, तो वे अपने master चेकआउट और से इसे अपडेट कर सकते :

git pull --force