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-摘樱桃
我知道命令 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 waygit 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-摘樱桃