实际上,存在第三种可能性,并且可能还有很多其他可能性,因为GIT更是SCM框架的实现而不是SCM方法论的实现。第三种可能性基于rebase
。
该rebase
GIT子命令将一系列提交(通常从分支点到你的主题分支的末端topic
)和重放它们在其他地方(通常在您的集成分支的末端,如master
)。该rebase
子产生新的提交,其给出了一个形式,是比较容易审核清理提交的机会。这将产生一系列新的提交,类似于topic
过去,但是植根于集成分支的顶部。topic
GIT 仍会调用此新分支,因此旧引用将被丢弃。我非正式地标记topic-0
了分支的原始状态,topic-1
以此类推。
这是我对您的topic
分支机构的建议:
(可选步骤)您可以交互式地将主题分支topic
基于其分支点(请参阅和上的--fixup
选项,commit
以及-i
和上的--autosquash
选项rebase
),这使您有机会以更易于查看的方式重写提交。这导致一个分支topic-1
。
您将主题分支重新设置到集成分支的顶部,类似于进行合并,但是通过“合并”(仅是软件工程工件)“不污染”历史记录。这导致一个分支topic-2
。
发送topic-2
给队友,让其根据的提示进行审核master
。
如果topic-2
可以,则将其合并到主服务器。
注意分支(分支指的是提交树)在GIT中将全部称为相同,因此,在过程结束时,只有分支topic-2
在GIT中具有名称。
优点:
- 没有过时的代码正在审查中。
- 没有虚假的“外国合并”评论(您在第一篇中描述的现象)。
- 重写提交的机会很干净。
缺点:
- 在提交树中创建了
topic-0
三个分支工件topic-0
, topic-1
而不是一个分支topic-2
。(尽管在任何时候,其中只有一个在GIT中具有名称。)
在您的第一种情况中,«如果有人在“ 1”之间合并了某些内容。和“ 2”»是指分支点的创建与您决定合并的时间之间的时间。在这种情况下,«如果有人在“ 1”之间合并了某些内容。和“ 2.”»指的是变基与合并之间的时间跨度,通常很短。因此,在我提供的方案中,您可以master
在合并时“锁定” 分支,而不会显着干扰您的工作流程,而在第一种方案中则不可行。
如果您要进行系统的代码审查,则以适当的方式重新排列提交(可选步骤)可能是个好主意。
仅在您在存储库之间共享中间分支工件的情况下,管理它们才出现困难。