這是一種類似的模式,可以將本地補丁集保存到您不控制的上游項目中。處理這種情況最簡單的方法是讓所有的改變打通合併,像這樣的中間分支:
___________________________ master
\__________________________ config-changes
\_____________________ daily-work
master
包含一切,是被共享。在config-changes
中唯一承諾的內容是您希望能夠在共享時輕鬆恢復的更改。 daily-work
是你做的所有工作的分支設置它,這樣做:
# (no local config changes should be in master at this point)
git checkout -b config-changes master
# Make your config-related changes that you don't want to share
git commit -am "Made local config changes"
git checkout -b daily-work
# Work and commit like normal
當你準備好分享您的更改,這樣做:
git rebase --onto master config-changes daily-work
git checkout master
git merge daily-work
這將恢復所有的變化在config-changes
中製作,但除此之外使它看起來像你從master
直接分支。請注意,在完成此重新分配之後,如果您想繼續使用daily-work
,則需要將其重新分配到config-changes
,但最好爲每個更改創建一個新分支。
當你需要從master
拉下新的變化,這樣做:
git checkout master
git pull
git checkout config-changes
git merge master
合併重新應用本地配置的變化到最新的高手。然後,您可以根據需要自由創建新的daily-work
分支,或將config-changes
合併到舊分支中。基本上,您絕不會直接從master
合併到daily-work
。你總是先通過config-changes
。
起初看起來很多工作,但是一旦你做了一次或兩次,你會發現它比手動維護更改要容易得多。
真棒,這正是我正在尋找/希望的。謝謝! –
這非常有幫助。謝謝! – Pat
SmartGit有一個名爲「Interactive Rebase」的功能,可讓您輕鬆上下移動提交。對於這種情況,在對話框中向上移動「config-changes」提交最容易。然後,只需在「config-changes」之前提交即可。作爲避免意外推送我的臨時提交的預防措施,我在提交消息中添加了一個「TMP:」前綴,然後添加了一個本地push-hook來在我意外推送我的臨時提交時發出警告。 – Ryuu