Git 与单个破折号合并

Git merge with a single dash

我知道命令 git checkout - 将您检查到前一个 活动分支 分离的 HEAD.

我想知道的是,命令 git merge - 是否将先前的 active 分支 detached HEAD 合并到我的目前签出分店

我刚刚测试,合并是与最后一个活动分支完成的

documentation for git-checkout 描述了如何使用 @{-N} 语法描述你想要的分支:

You can use the @{-N} syntax to refer to the N-th last branch/commit checked out using "git checkout" operation. You may also specify - which is synonymous to @{-1}.

到目前为止,我还没有找到任何其他文档说 -@{-1} 的同义词,但是这个符号记录在 git-revisions 中,这意味着它比仅仅更通用用于 git checkout。认为您可以在需要分支或提交的任何地方使用它似乎是合理的。

我习惯性地同时使用git checkout -git merge -。它们非常有用,我从来没有遇到过任何问题。所以直接回答你的问题,是的,git merge 解释 - 就像 git checkout。也就是说,很遗憾文档如此神秘。

其他答案给出了文档的正确指针,这是当前(2.32 版)的实现方式:

git 扫描 reflog 以查找最新行,如下所示:

checkout: moving from xxx to yyy

并使用 xxx 作为目标参考。

@{-2} 搜索第二个最新行,@{-3} 搜索第三个最新行,等等...


您可以在测试回购中尝试:HEAD 的 reflog 只是一个存储在 .git/logs/HEAD.

的文件

请注意,在该文件中,行是按时间顺序编写的:最旧的行在顶部,最新的在底部。这与您 运行 git reflog 时看到的相反,其中最旧的行在底部,最新的在顶部。

如果您编辑它(警告:手动编辑 reflog 可能会破坏内容,请在测试存储库上执行此操作,而不是在您的主要工作存储库上),并更改最后 checkout: ... 行的消息,您会看到 git checkout -git rev-parse --abbrev-ref @{-XX} 等命令会相应地更改行为。

您的假设是正确的,git merge -branch/commit 在当前 之前签出的分支合并到您当前签出的分支中。

Git 1.7.6 的发行说明明确指出:

git merge learned - as a short-hand for the previous branch, just like the way git checkout - works.

在允许这样做的命令中,-@{-1} 的 shorthand,在 gitrevisions:

中指定

@{-<n>}, e.g. @{-1}
The construct @{-<n>} means the <n>th branch/commit checked out before the current one.


通过查看发行说明和源代码,我能够确定以下命令支持单独的 - 作为 @{-1} 的简写:

  • git-结帐(自 Git 1.6.2)
  • git-合并(自 Git 1.7.6)
  • git-变基(自 Git 2.0.0)
  • git-开关
  • git-工作树
  • git-还原
  • git-摘樱桃