यहां एक वर्कफ़्लो है जिसे मैं आमतौर पर काम से निपटता हूं।
git checkout -b feature_branch
# Do some development
git add .
git commit
git push origin feature_branch
इस बिंदु पर सुविधा शाखा मेरे सहयोगियों से समीक्षा के लिए है, लेकिन मैं अन्य सुविधाओं पर विकसित करना चाहता हूं जो कि निर्भर हैं feature_branch
। तो feature_branch
समीक्षा में है ...
git checkout feature_branch
git checkout -b dependent_branch
# Do some more development
git add .
git commit
अब मैं फीचर_ब्रांच पर कोड समीक्षा के जवाब में कुछ बदलाव करता हूं
git checkout feature_branch
# Do review fixes
git add .
git commit
git checkout dependent_branch
git merge feature_branch
अब यह वह जगह है जहां हमें समस्याएं हैं। हमारे पास मास्टर पर एक स्क्वैश पॉलिसी है, जिसका अर्थ है कि मास्टर में विलय होने वाली सुविधा शाखाओं को एक ही प्रतिबद्ध में स्क्वैश करना होगा।
git checkout feature_branch
git log # Look for hash at beginning of branch
git rebase -i first_hash_of_branch # Squash feature_branch into a single commit
git merge master
सब कुछ शांत है, सिवाय इसके dependent_branch
। जब मैं गुरु पर आश्रित शाखा को पुन: स्थापित करने की कोशिश करता हूं या मास्टर को इसमें शामिल करने का प्रयास करता हूं, तो रिट लिखित / स्क्वैश इतिहास से भ्रमित होता है और मूल depedendent_branch
रूप से संघर्ष के रूप में हर एक परिवर्तन को चिह्नित करता है । यह एक PITA है जिसके माध्यम से जाना है और मूल रूप से सभी परिवर्तनों में फिर से संघर्ष करना है dependent_branch
। क्या इसका कोई हल है? कभी-कभी, मैं मैन्युअल रूप से एक पैच बनाऊंगा और इसे मास्टर की एक ताजा शाखा से लागू करूंगा, लेकिन अगर इसके साथ कोई वास्तविक विवाद है, तो इसे ठीक करने के लिए और भी बदतर है।
git checkout dependent_branch
git diff > ~/Desktop/dependent_branch.diff
git checkout master
git checkout -b new_dependent_branch
patch -p1 < ~/Desktop/dependent_branch.diff
# Pray for a clean apply.
कोई विचार? मुझे पता है कि स्क्वैश के दौरान फिर से लिखे गए इतिहास के कारण ऐसा होता है, लेकिन यह एक ऐसी आवश्यकता है जिसे मैं बदल नहीं सकता। सबसे अच्छा समाधान / समाधान क्या है? क्या कोई जादू है जो मैं कर सकता हूं? या मैन्युअल रूप से अंतर बनाने के लिए शामिल सभी चरणों को करने का एक तेज़ तरीका है?
git add .
पूरी तरह से बुराई है, और अंत में आपको काटेगा जब आप उन चीजों को हवा देते हैं जिनका आप मतलब नहीं रखते थे। आप का उपयोग करना चाहिएgit add -p
या कम से कम से कमgit add -u .