背景:我们在项目中使用Github,我在我们主要仓库的自己的fork上工作。为了避免大型合并提交,我们使用rebase而不是merge。
情境:我的工作方式如下:
- 实现新功能时,在我的fork的主分支上创建本地分支,并在其中放入更改。我和组内其他人进行许多小的提交,因此几乎总会有多个提交影响分支上的同一个文件。
- 将本地分支推送到我的fork上,这样我就有了我正在工作的远程副本(如果我的笔记本电脑死机或丢失,我不想失去所有更改。我尽量每天结束时执行此操作)。
- 如果完成特性需要很长时间,则偶尔在我的fork的主线上进行rebase,以确保没有更改可能破坏我的特性。这通常能正常工作。
- 为了使分支的远程副本保持最新状态,在rebase之后,将本地分支推送到该分支。
问题:第4步是我遇到问题的地方。我几乎总是不得不处理非快进提交并使用git push --force。
我看过了
Git: how to maintain permanent parallel branches
How to maintain (mostly) parallel branches with only a few difference
并没有找到一种使我的工作流程正常工作的方法。进行有关git工作流程的谷歌搜索通常返回假定您所有人都在本地分支上工作,并且不在github上保留远程副本的结果(例如http://nvie.com/posts/a-successful-git-branching-model/)。
我对Git相对较新,所以想知道是否有遗漏。我希望在不使用 --force 的情况下完成第4步。另一种工作流程仍然允许我使用rebase代替merge并保留本地分支的远程副本也非常有用。
--force-with-lease
来避免竞态条件,如果上游版本比本地版本新,它将失败。 - mLuby