这是一种类似的模式,可以将本地补丁集保存到您不控制的上游项目中。处理这种情况最简单的方法是让所有的改变打通合并,像这样的中间分支:
___________________________ 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