5

根据这篇文章,我试图让自己养成在更新工作副本时显式获取和合并的习惯。但是,今天我在发出命令时打错了:

$ git fetch origin
$ git merge origin asdf

请注意,我在合并命令上使用了空格而不是正斜杠。因为无论如何它似乎已经达到了预期的效果,所以直到我已经推送它才注意到它在日志中添加了一个措辞奇怪的提交:

commit 65f0037bed926c338cb95e7437e7f7f407028d9f
Author: Me <my_email@example.com>
Date:   Mon May 14 09:36:44 2012 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf

现在我想知道这是否真的有任何负面影响。似乎它将参数视为两个单独的分支规范以合并到当前分支中,并且“origin”将隐式扩展为“origin/asdf”——这正是我真正想要的。那时,我不知道为什么它甚至会允许“将分支'asdf' 合并到 asdf”发生。

这只是一个令人尴尬的无操作吗?或者我是否在我的存储库历史记录中引入了一个可能有问题的构造?

编辑:输出git cat-file commit 65f0037b

tree 74ed9ead4b82e4e56bd5656ee10375f8f0fcb60d
parent 3bc2a37031a4a391aa4da64c22e3f55148cd23e2
author Me <my_email@example.com> 1337013404 -0700
committer Me <my_email@example.com> 1337013404 -0700

    Merge branch 'asdf', remote-tracking branch 'origin' into asdf
4

1 回答 1

4

让我们从命令的手册页开始merge

   git merge [-n] [--stat] [--no-commit] [--squash]
           [-s <strategy>] [-X <strategy-option>]
           [--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]

因此,如果没有所有选项,则merge接受提交列表。如果您已经在分支上asdf并输入:

git merge asdf

...这是一个无操作:将分支与自身合并意味着无事可做。如果您键入:

git merge origin

然后git将查找与远程命名关联的默认分支origin。在输出中branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

remotes/origin/HEAD指向默认分支,所以:

git merge origin

相当于:

git merge origin/master

因此,假设您的遥控器上的默认分支是master,当您键入:

git merge origin asdf

你得到了:

git merge origin/master

如果默认分支是asdf,你得到:

git merge origin/asdf
于 2012-05-14T18:52:14.753 回答