在从中重置的分支上推送没有问题。下面的图表说明了为什么这样做没问题:
假设你在本地分支上创建了一个分支,并提交了一些更改(C和D),此时提交历史如下所示。在你创建local_branch之后,其他人向origin/master提交了一个更改(E):
A -- B -- E [origin/master]
\
\
\-- C -- D [local_branch]
然后运行"git rebase origin/master"后,提交历史将如下所示。"origin/master"保持不变,但是"local_branch"已经被重新设置:
A -- B -- E [origin/master]
\
\
\-- C -- D [local_branch]
此时,如果你执行"git push origin local_branch:master",就会得到一个简单的快进。"origin/master"和"local_branch"将相同:
A -- B -- E -- C -- D [origin/master],[local_branch]
现在你可以在"local_branch"上继续工作。最终,你可能会得到类似于以下内容:
A -- B -- E -- C -- D -- G -- I [origin/master]
\
\
\-- F -- H [local_branch]
注意,这看起来很像开始的提交历史。你可以一遍又一遍地重复这个过程。
你应该避免向一些
其他分支推送,特别是那些你没有进行重置的分支。否则,你会遇到麻烦(对于其他分支,看起来你的"local_branch"历史已经被重新编写,而这是在你从"origin/master"重置之后发生的)。
.git
目录中的配置文件(config
、hooks/*
等)。提醒一下。尽管如此,我认为这是一个好的解决方案。 - Pat Notz