来自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.
$
答案 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上发生了同样的确切提交...而我的示例并不是真正相同的提交。