Git:在合并提交中保留分支拓扑

时间:2013-03-29 13:06:52

标签: git git-merge

我想问一下Git在以下场景中的合并:

branchA  -*-*-*-*-*
                   \
            branchB *-*-*-*

在这种情况下可以进行git合并获得以下结果吗?

branchA  -*-*-*-*-*---------*
                   \       /
            branchB *-*-*-*

我想要获得的是在branchA上进行单个合并提交,其中包含来自branchB的所有更改。 我知道git merge命令中有--squash选项,但是我不确定它是否100%等同于标准合并。

因此,允许我阻止我的分支拓扑,而只是快进。

非常感谢您提前寻求帮助!

2 个答案:

答案 0 :(得分:3)

尝试git merge branchb --no-ff(来自brancha)。来自git-merge(1)

  

- 无-FF

     

即使合并解析为快进,也会创建合并提交。

即使git意识到当前的HEAD(分支A,因为这是你将合并形式的地方)只是分支B上提交的祖先,它没有任何并行发生的变化,它会阻止快进在分支A上。

答案 1 :(得分:1)

不,您无法生成包含分支中所有更改的真实合并提交。 <{1}}将生成带有更改的单个提交,但它不会是合并提交。

Git提交在给定时间记录存储库的完整状态,而不是先前提交的更改。因此,当您稍后检查历史记录时,不会在创建提交时生成差异。

但是,如果使用git merge --squash创建合并,即使可以在不创建新提交的情况下进行快进合并,也可以确保创建提交。然后,如果你使用git commit --no-ff branchB,它将忽略在branchB上进行的提交,使得看起来所有这些更改都是由该合并提交引入的,git log -m --first-parent选项将导致显示完整的差异用于合并提交(如果以其他方式显示差异)。