2013-01-23 9 views
5

हमारे गिट रेपो में हमने गलती से एक प्रतिबद्धता बनाई जिसने हमारी सभी फाइलों को हटा दिया। यह प्रतिबद्धता हमारे केंद्रीय सर्वर पर धकेल दी गई थी और इसे अन्य डेवलपर्स द्वारा खींचा गया है और सर्वर बनाने के लिए इतिहास को फिर से लिखना इसे आदर्श नहीं है। इसके बजाए हमने अपनी पिछली स्थिति में सभी फ़ाइलों को पुनर्स्थापित करने के लिए एक और रोलबैक प्रतिबद्ध किया, जिसमें किसी अन्य प्रकार की रोलबैक प्रतिबद्धता के साथ किसी भी तरह से कुछ फ़ाइलों को पुनर्स्थापित किया गया।गिट: रेपो में सभी फ़ाइलों को हटाने का कोई दीर्घकालिक प्रभाव फिर प्रतिबद्धता को वापस ले रहा है?

cc043989 Rollback commit (goes back to 4bf31def) 
f5d7f10e Failed rollback commit 
cd60376f Delete all files commit 
4bf31def Last good commit 
. 
. 
. 

हमारी चिंता यह है कि क्या यह करने के लिए/मर्ज के संबंध सुविधा शाखाओं से साथ और विशेष रूप से करने के लिए/सबट्री रेपोस से, किसी भी लंबे समय प्रभाव में परिणाम होगा है। यदि यह लगातार भविष्य में विलय या कुछ और चुनौतीपूर्ण बनाने जा रहा है, तो यह इतिहास को फिर से लिखने और मैन्युअल रूप से बिल्ड सर्वर/अन्य डेवलपर रेपो से निपटने के लायक हो सकता है।

उत्तर

1

मान लीजिए कि आपके इतिहास इस तरह दिखता है:

 
A --- B --- C --- D master 
\ 
    E --- F    topic 

में प्रतिबद्ध "बी", अगर आप गलती से सभी फाइलों को हटा दें। प्रतिबद्ध "सी" में, आप सभी फाइलों को पुनर्स्थापित करते हैं।

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

प्रतिबद्ध हटाने के लिए,

git checkout master 
git rebase -i 4bf31def 

तो बुरा प्रतिबद्ध बाहर टिप्पणी:

 
# cc043989 Rollback commit (goes back to 4bf31def) 
# f5d7f10e Failed rollback commit 
# cd60376f Delete all files commit 
4bf31def Last good commit 

अच्छी खबर यह है कि आप अपना समय ले सकते हैं। आप बाद में इतिहास को काम कर सकते हैं और ठीक कर सकते हैं, या आप इसे ठीक कर सकते हैं।

+0

यदि अन्य इस पर निर्भर करते हैं, तो अधिक इतिहास-पुनर्लेखन को डाउनस्ट्रीम की आवश्यकता होने से पहले इसे बेहतर तरीके से प्राप्त करें। – vonbrand

0

यदि आप रोलबैक रखते हैं तो परिणाम आपकी सभी फ़ाइलों को हटाने और फिर अपनी सभी फ़ाइलों को जोड़ने के समान होगा। रोलबैक से पहले आने वाला कोई भी बदलाव टकराएगा क्योंकि आपके पास किसी भी फ़ाइल के लिए दो स्रोत होंगे।

सबट्री उसी से पीड़ित होंगे, आपके पास एक प्रतिबद्धता होगी जो सबकुछ हटा देगी और दूसरा इसे पुन: प्रयास करेगी, इस प्रकार पहले से किसी भी बदलाव को संघर्ष के रूप में माना जा सकता है।

संबंधित मुद्दे