首先,您和与您一起工作的人需要就主题/开发分支是用于共享开发还是仅用于您自己的开发达成一致。其他开发人员知道不要合并到我的开发分支上,因为它们会随时重新建立基础。通常工作流程如下:
o-----o-----o-----o-----o-----o master
\
o-----o-----o devel0
\
o-----o-----o devel1
然后,为了保持最新的远程状态,我将执行以下操作:
git fetch origin
git checkout master
git merge --ff origin/master
我这样做有两个原因。首先,因为它允许我查看是否有远程更改,而无需从我的开发分支切换。其次,它是一种安全机制,可确保我不会覆盖任何未隐藏/已提交的更改。另外,如果我无法快进合并到 master 分支,这意味着有人已经重新调整了远程 master 的基础(为此他们需要受到严厉的鞭打),或者我不小心提交了 master 并需要清理我的末端。
然后,当远程发生更改并且我已快进到最新版本时,我将重新设置基准:
git checkout devel0
git rebase master
git push -f origin devel0
然后其他开发人员知道他们需要根据我的最新版本重新调整他们的开发分支:
git fetch <remote>
git checkout devel1
git rebase <remote>/devel0
这会产生更清晰的历史记录:
o-----o master
\
o-----o-----o devel0
\
o-----o-----o devel1
Don't合并可以随心所欲地来回提交。它不仅会创建重复的提交并使历史记录无法跟踪,而且几乎不可能从特定更改中找到回归(这就是您首先使用版本控制的原因,对吧?)。您遇到的问题就是这样做的结果。
另外,听起来其他开发人员可能正在向您的开发分支做出提交。你能否证实这一点?
合并的唯一时间是当您的主题分支准备好被接受时master
.
附带说明一下。如果多个开发人员提交到同一个存储库,您都应该考虑使用命名分支来区分开发人员开发分支。例如:
git branch 'my-name/devel-branch'
因此,所有开发人员主题分支都位于他们自己的嵌套集中。