我还在学习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,会发生什么?
答案 0 :(得分:2)
根据您的评论,看起来git执行了简单的快进合并。基本上你在branch1中进行了一次或多次提交,然后将该分支合并回branch0,所以git只是将branch0的指针移动到指向branch1的最后一次提交。
这是一个快速合并。有些人不喜欢这样,并希望看到显式合并,在这种情况下,您需要在发出合并命令时使用--no-ff标志。
git book中的下图可能有助于说明这一点:
当git执行快进合并时,分支主控(或者你的情况下是branch0)只是移动到指向提交C3。不会创建其他合并提交。
如果删除branch1则没有任何内容丢失,因为branch0仍然指向来自branch1的最新提交。您可以通过发出以下命令来验证它(在branch0上)。
git branch --merged
它应该显示branch1,你可以删除:
git branch -d branch1
如果您尝试删除未合并的分支,Git会发出警告,您必须强制删除-D