Git 在终端 window 关闭后合并获取源分支名称
Git merge get source branch name after terminal window was closed
在Git中如何获取合并源分支的名称?
我昨天开始合并,遇到了我没有解决的冲突,然后 windows 更新重新启动了我的电脑,关闭了我的终端 window。
TL;DR
看.git/MERGE_MSG
的第一行。
多头
根据评论,我们有以下情况:
- 某事——也许不是你,或者你可能会记得你做过什么——运行
git merge <em>string</em>
.
- 这次合并有冲突,所以在合并中途停止了。
- 然后,当您正在处理该问题时,其他东西重启了机器(大概是安全的,但您失去了上下文)。
- 其他 Git 命令可能已经或可能没有 运行,但您仍处于冲突合并的中间。
- 您现在想要取回
string
。
Git只有一个地方保存了文字串,那就是Git目录下的MERGE_MSG
文件。如果你有一个典型的设置并且在你的工作树的顶层,那就是:
$ cat .git/MERGE_MSG
Merge branch 'A' into B
# Conflicts:
# new-filename
第一行将显示为:
Merge branch 'string'
或:
Merge branch 'string' into <name>
其中 name
是合并开始时您所在的 b运行ch 的名称。 (当且仅当 <name>
是文字文本 master
时, into <name>
部分被省略。这是 Git 中名称 master
的少数几个地方之一得到特殊对待:它稍微改变了默认的合并消息。)
如果您的 Git 目录(正确的存储库)在其他地方,请使用 git rev-parse --git-dir
找到它。
原始提交哈希 ID 更容易获得:
$ git rev-parse MERGE_HEAD
243e415273b34b1553ce5eaeb6a189595d322015
你可以把它变成一组 b运行ch 名称,直接指向这个提交 git branch --points-at
:
$ git branch --points-at MERGE_HEAD
但是这个可能根本不产生任何名字——例如,如果你运行git merge
一个原始哈希ID,或者b运行ch 名称从那时起就被移动了——或者它可能产生多个名称。所以 .git/MERGE_MSG
的第一行可能是要看的地方。
请注意,顺便说一句,您可以像往常一样使用 git log
查看从 MERGE_HEAD
可访问的提交:
$ git log MERGE_HEAD
这有时是 查看 您正在合并的内容的有用方法,具体取决于每个 b运行ch 的每个 "leg" 上的提交数量:
$ git log --decorate --oneline --graph --boundary MERGE_HEAD...HEAD
对于我一直使用的存储库,这会产生:
* 243e415 (A) modify renamed file too
* 57b6097 rename in branch A
| * c8d5dd8 (HEAD -> B) remove orig-filename
|/
o 3a5c9ae (master) add orig-filename
在这种情况下,可视化可能就足够了,但在更复杂的图形中,添加 --left-right
可能会有所帮助:
$ git log --decorate --oneline --graph --left-right --boundary MERGE_HEAD...HEAD
< 243e415 (A) modify renamed file too
< 57b6097 rename in branch A
| > c8d5dd8 (HEAD -> B) remove orig-filename
|/
o 3a5c9ae (master) add orig-filename
请注意 "our" b运行ch,HEAD
aka B
,如何位于三个点 MERGE_HEAD...HEAD
的右侧,并且一些提交是标记为 >
因为它们在我们的 b运行ch 上。 "Their" b运行ch,MERGE_HEAD
aka A
,被标记为 <
因为 MERGE_HEAD
在 MERGE_HEAD...HEAD
的左边。
(--boundary
选项调整包含在 git log
输出中的提交集,以便我们在此处看到最后一次提交,在本例中为 master
。没有这个提交已从 git log
输出中排除。)
在Git中如何获取合并源分支的名称?
我昨天开始合并,遇到了我没有解决的冲突,然后 windows 更新重新启动了我的电脑,关闭了我的终端 window。
TL;DR
看.git/MERGE_MSG
的第一行。
多头
根据评论,我们有以下情况:
- 某事——也许不是你,或者你可能会记得你做过什么——运行
git merge <em>string</em>
. - 这次合并有冲突,所以在合并中途停止了。
- 然后,当您正在处理该问题时,其他东西重启了机器(大概是安全的,但您失去了上下文)。
- 其他 Git 命令可能已经或可能没有 运行,但您仍处于冲突合并的中间。
- 您现在想要取回
string
。
Git只有一个地方保存了文字串,那就是Git目录下的MERGE_MSG
文件。如果你有一个典型的设置并且在你的工作树的顶层,那就是:
$ cat .git/MERGE_MSG
Merge branch 'A' into B
# Conflicts:
# new-filename
第一行将显示为:
Merge branch 'string'
或:
Merge branch 'string' into <name>
其中 name
是合并开始时您所在的 b运行ch 的名称。 (当且仅当 <name>
是文字文本 master
时, into <name>
部分被省略。这是 Git 中名称 master
的少数几个地方之一得到特殊对待:它稍微改变了默认的合并消息。)
如果您的 Git 目录(正确的存储库)在其他地方,请使用 git rev-parse --git-dir
找到它。
原始提交哈希 ID 更容易获得:
$ git rev-parse MERGE_HEAD
243e415273b34b1553ce5eaeb6a189595d322015
你可以把它变成一组 b运行ch 名称,直接指向这个提交 git branch --points-at
:
$ git branch --points-at MERGE_HEAD
但是这个可能根本不产生任何名字——例如,如果你运行git merge
一个原始哈希ID,或者b运行ch 名称从那时起就被移动了——或者它可能产生多个名称。所以 .git/MERGE_MSG
的第一行可能是要看的地方。
请注意,顺便说一句,您可以像往常一样使用 git log
查看从 MERGE_HEAD
可访问的提交:
$ git log MERGE_HEAD
这有时是 查看 您正在合并的内容的有用方法,具体取决于每个 b运行ch 的每个 "leg" 上的提交数量:
$ git log --decorate --oneline --graph --boundary MERGE_HEAD...HEAD
对于我一直使用的存储库,这会产生:
* 243e415 (A) modify renamed file too
* 57b6097 rename in branch A
| * c8d5dd8 (HEAD -> B) remove orig-filename
|/
o 3a5c9ae (master) add orig-filename
在这种情况下,可视化可能就足够了,但在更复杂的图形中,添加 --left-right
可能会有所帮助:
$ git log --decorate --oneline --graph --left-right --boundary MERGE_HEAD...HEAD
< 243e415 (A) modify renamed file too
< 57b6097 rename in branch A
| > c8d5dd8 (HEAD -> B) remove orig-filename
|/
o 3a5c9ae (master) add orig-filename
请注意 "our" b运行ch,HEAD
aka B
,如何位于三个点 MERGE_HEAD...HEAD
的右侧,并且一些提交是标记为 >
因为它们在我们的 b运行ch 上。 "Their" b运行ch,MERGE_HEAD
aka A
,被标记为 <
因为 MERGE_HEAD
在 MERGE_HEAD...HEAD
的左边。
(--boundary
选项调整包含在 git log
输出中的提交集,以便我们在此处看到最后一次提交,在本例中为 master
。没有这个提交已从 git log
输出中排除。)