"git merge origin/branch"中忘记斜杠的后果

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”-这正是我实际想要的。此时,我不知道为什么它甚至允许“Merge branch 'asdf' into 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

类似于这个问题?https://dev59.com/J3E85IYBdhLWcg3wzm5p - bluesman
你能执行 git cat-file commit 65f0037b 吗?你可能已经执行了一个章鱼合并,或者其中一个提交可能只是快进了,而你可能通过一个误导性的提交消息得到了你想要的结果。从提交描述中很难判断。 - CB Bailey
@Charles Bailey:不幸的是,在我提出这个问题后约45分钟,我决定谨慎起见进行硬重置+重新执行有问题的合并。我意识到这可能使得回答这个问题变得不切实际,对此我深感抱歉。然而,larsks给出的答案以及我知道默认分支实际上是“origin/asdf”的事实,让我相信合并确实偶然(而且令人尴尬地)完成了我最初想要实现的目标。 - Zach
1
除非您故意将修剪时间设置得非常短并在过去一小时内进行了垃圾回收,否则提交65f0037b仍应存在...虽然现在它已经不重要了。 - CB Bailey
我把它编辑到问题中了。虽然现在已经不重要了,但我很好奇它会告诉你什么。 - Zach
2
@Neverender:这告诉我它只有一个父提交(从记录中无法看到),这意味着它不是真正的合并,而只是一次带有误导性提交消息的普通提交。可能提交中没有实际变化,或者更加令人担忧的是,父提交信息丢失了。也许您的本地克隆在执行此操作时是最新的。 - CB Bailey
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

不解释远程跟踪分支。 - bluesman
是的,我可以肯定地说,在这个例子中,remotes/origin/HEAD 实际上指向 origin/asdf。我认为这意味着我的最初评估(意外获得所需结果+尴尬的无操作)是准确的。 - Zach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接