git合并和日志消息

时间:2016-11-18 15:08:36

标签: git merge branch

我还在学习git。在合并之前,git log告诉我类似......

commit 9588d21a81d0f8a977c8d0651eee9f56eaf4186d
Merge: 0367c67 fbd02fc
Author: me   <me@here.there.com>
Date:   Thu Nov 17 17:09:25 2016 -0600

     On branch branch1

     ...

我想将branch1与branch0合并,所以我发出了merge命令:

> git checkout branch0
> git merge branch1

令我惊讶的是,它毫无障碍。输出看起来像:

Updating e57618a..9588d21
Fast-forward
 src/file1.c                         | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 src/blah.h                          |  15 +++-
 src/file2.c                         |   2 -
 src/main.c                          |  91 +++++++++++++++++------
 ...

 11 files changed, 811 insertions(+), 100 deletions(-) ...

没有冲突或任何AFAICT。但是,当我发出git log命令时,没有指示发生了此合并,并且branch1中的旧提交仍然位于日志的顶部:

commit 9588d21a81d0f8a977c8d0651eee9f56eaf4186d
Merge: 0367c67 fbd02fc
Author: me   <me@here.there.com>
Date:   Thu Nov 17 17:09:25 2016 -0600

     On branch branch1

     ...

这是我应该期待的行为吗?我至少期待分支现在显示为branch0。如果我尝试删除branch1,会发生什么?

1 个答案:

答案 0 :(得分:2)

根据您的评论,看起来git执行了简单的快进合并。基本上你在branch1中进行了一次或多次提交,然后将该分支合并回branch0,所以git只是将branch0的指针移动到指向branch1的最后一次提交。

这是一个快速合并。有些人不喜欢这样,并希望看到显式合并,在这种情况下,您需要在发出合并命令时使用--no-ff标志。

git book中的下图可能有助于说明这一点:

two git branches before a fast-forward merge

当git执行快进合并时,分支主控(或者你的情况下是branch0)只是移动到指向提交C3。不会创建其他合并提交。

如果删除branch1则没有任何内容丢失,因为branch0仍然指向来自branch1的最新提交。您可以通过发出以下命令来验证它(在branch0上)。

git branch --merged

它应该显示branch1,你可以删除:

git branch -d branch1

如果您尝试删除未合并的分支,Git会发出警告,您必须强制删除-D

相关问题