git 合并并记录消息

git merging and log message

我仍在学习 git。在合并之前,git 日志告诉我类似 ....

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,所以我发出了合并命令:

> 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 日志命令时,没有迹象表明已发生此合并,并且 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,此时会发生什么情况?

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

这是快进合并。有些人不喜欢那样并希望看到明确的合并,在这种情况下,您需要在发出合并命令时使用 --no-ff 标志。

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

当 git 执行快进合并时,分支 master(或您的情况下的 branch0)简单地移动到指向提交 C3。没有创建额外的合并提交。

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

git branch --merged

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

git branch -d branch1

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

强制删除