为什么这个合并没有快速转发?

时间:2011-05-27 17:00:30

标签: git

来自Git Book:

“如果当前分支没有从另一个分支 - 所以当前分支中存在的每个提交已经包含在另一个中 - 那么git只执行”快进“

我正在尝试重现这种情况,但这不会产生任何快速前锋:

$ git init
Initialized empty Git repository in /work/fun/git_experiments/.git/
$ echo initial > readme && git add readme && git commit -a -m Created
[master (root-commit) 74495b9] Created
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme
$ git branch b1
$ echo modified > readme && git commit -a -m "Modified"
[master d40d5fb] Modified
 1 files changed, 1 insertions(+), 1 deletions(-)
$ git checkout b1
Switched to branch 'b1'
$ echo modified > readme && git commit -a -m "Modified"
[    b1 46fd337] Modified
 1 files changed, 1 insertions(+), 1 deletions(-)
$ git merge master
Merge made by recursive.
$ 

3 个答案:

答案 0 :(得分:4)

因为虽然两个提交的内容相同,但它们实际上并不是相同的提交(N.B。:一个是提交ID d40d5fb,另一个是46fd337)。因此,分支b1包含不在master中的提交,因此b1中的所有提交都不是master的后代。

答案 1 :(得分:0)

提交的内容是相同的,但提交本身不是。在这种特殊情况下,您将d40d5fb合并到46fd337中,因此需要执行合适的合并,将这两个提交与单个头绑定。两个人独立编写完全相同的提交的唯一方法是名称,电子邮件和时间戳也是相同的。

尝试使用变基,这会压缩引入相同差异的提交。

答案 2 :(得分:0)

我想我明白了:

$ git checkout master
Switched to branch 'master'
$ git merge b1
Updating d40d5fb..fd337c3
Fast-forward
$ 

当我将更改合并回master时,它会被快速转发,因为在b1上发生了同样的确切提交...而我的示例并不是真正相同的提交。