“忘记斜杠”的后果;“git合并来源/分支机构”;
在更新工作副本时,我试图让自己养成显式获取和合并的习惯。但是,今天我在发出命令时输入了一个错误:“忘记斜杠”的后果;“git合并来源/分支机构”;,git,Git,在更新工作副本时,我试图让自己养成显式获取和合并的习惯。但是,今天我在发出命令时输入了一个错误: $ git fetch origin $ git merge origin asdf 注意,我在merge命令中使用了空格而不是正斜杠。因为它似乎已经达到了预期的效果,所以我在推送之前没有注意到它在日志中添加了一个措辞奇怪的commit: commit 65f0037bed926c338cb95e7437e7f7f407028d9f Author: Me <my_email@example.
$ git fetch origin
$ git merge origin asdf
注意,我在merge命令中使用了空格而不是正斜杠。因为它似乎已经达到了预期的效果,所以我在推送之前没有注意到它在日志中添加了一个措辞奇怪的commit:
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
让我们从
merge
命令的手册页开始:
git merge [-n] [--stat] [--no-commit] [--squash]
[-s <strategy>] [-X <strategy-option>]
[--[no-]rerere-autoupdate] [-m <msg>] [<commit>...]
…这是不可操作的:将分支与自身合并意味着无需执行任何操作。如果键入以下内容:
git merge origin
然后,git
将查找与名为origin
的远程设备关联的默认分支。在分支-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
没有解释远程跟踪分支,我可以肯定地说,在本例中,remotes/origin/HEAD实际上指向origin/asdf。我认为这意味着我最初的评估(意外地得到了期望的结果+笨拙的无操作)是准确的。类似于此吗?您能执行git cat文件提交65f0037b吗?您可能已经执行了八达通合并,或者其中一个提交可能只是快进的,您可能已经通过一条误导性的提交消息得到了您想要的。很难从提交描述中找到答案。@Charles Bailey:不幸的是,在我问了这个问题大约45分钟后,我决定在谨慎方面犯错误,硬重置+重做有问题的合并。我意识到这可能会使这个问题无法得到确切的回答,对此我深表歉意。然而,larsks给出的答案,再加上我知道默认分支实际上是“origin/asdf”这一事实,让我相信合并确实巧合地(笨拙地)实现了我最初的预期。除非你故意将修剪时间设置得非常短,并在过去的一个小时内进行gc'ed,提交65f0037b应仍然存在。。。这不再重要了。@Neverender:它告诉我它只有一个父级(我从日志中看不到),这意味着它不是真正的合并,只是一个带有误导性提交消息的常规提交。可能是提交中没有实际更改,或者更令人担忧的是,父信息丢失了。当你这样做的时候,也许你的本地克隆是最新的。
git merge origin/master
git merge origin/asdf