निश्चित नहीं है कि यह करने के लिए "धन्य" तरीका है, लेकिन यहां मैंने "बल धक्का" या इस तरह के कुछ भी सकल के बिना एक ही समस्या को हल करने के लिए क्या किया।
चलिए मान लेते हैं कि आपका इतिहास कुछ इस तरह का है (और एम फ्लब्ड मर्ज है):
-A--B--C--M (master points here)
\ /
D----E
git checkout -b merge_fix <commit ID E>
इससे पहले कि हम कोई गलती करें, रनिंग एक शाखा बनाता है:
-A--B--C--M (master points here)
\ /
D----E (HEAD and merge_fix point here)
अब, हमारी नई शाखा पर मर्ज को फिर से करते हैं। हम सिर्फ मर्ज नहीं कर सकते हैं master
, इसलिए हमें अपने खराब मर्ज से पहले मैन्युअल रूप से कमिटमेंट लेने की जरूरत है: git merge <commit ID C>
पिछली बार आपने जो गलतियां की थीं , उन्हें न करें!
-A--B--C--M (master points here)
\ X
D----E-G (HEAD and merge_fix point here)
यह मानते हुए कि प्रतिबद्ध G
अच्छा लगता है, अब हम master
शाखा के शीर्ष के साथ सिंक करना चाहते हैं । यह आदेश उन परिवर्तनों को अनदेखा करने के लिए कहता है जो मास्टर करने के लिए किए गए थे, और मर्ज परिणाम बनने के लिए हमारे परिवर्तनों को बाध्य करते हैं:git merge -s ours master
-A--B--C--M (master points here)
\ X \
D----E-G--H (HEAD and merge_fix point here)
अंत में, (फिर से यह मानते हुए कि प्रतिबद्ध H
अच्छा लगता है, हम master
अपने निश्चित मर्ज को शामिल करने के लिए तेजी से आगे बढ़ना चाहते हैं:
git checkout master
git merge merge_fix
यह वास्तव में सिर्फ master
शाखा सूचक को स्थानांतरित करता है H
, लेकिन मैं अपनी ASCII कला को थोड़ा साफ करने का अवसर लूंगा:
-A--B--C--M--H (HEAD, master, and merge_fix all point here)
\ X /
D----E--G
आखिर तुमने इसे हासिल कर ही लिया है! आपने किसी भी इतिहास को अमान्य किए बिना मर्ज को फिर से सफलतापूर्वक किया है!