终端窗口关闭后,Git merge获取源分支名。

问题描述 投票:0回答:1

在Git中,如何获得合并后的源分支名称?

我昨天开始合并,但出现了冲突,我没有完成解决,然后windows更新重启了我的电脑,关闭了我的终端窗口。

git git-merge
1个回答
2
投票

TL;DR

请看第一行的 .git/MERGE_MSG.

长长的

根据评论,我们有以下情况。

  • 有东西... 也许不是你,否则你可能会记得你做了什么... ... git merge string.
  • 这个合并有冲突,所以它在合并的过程中停止了。
  • 然后,当你在做这个工作的时候,有别的东西做了一次机器重启(大概是安全的,但你失去了上下文)。
  • 其他的 Git 命令可能被运行了,也可能没有,但你仍然在冲突的合并过程中。
  • 现在您想得到的是 string 回。

Git只在一个地方保存了字符串,那就是在 MERGE_MSG 文件在 Git 目录下。 如果你有一个典型的设置,并且是在你的工作树的顶层,那就是。

$ cat .git/MERGE_MSG
Merge branch 'A' into B

# Conflicts:
#   new-filename

第一行会读作:

Merge branch 'string'

or:

Merge branch 'string' into <name>

其中 name 是合并开始时您所在分支的名称。 (在合并开始时,您所在的分支名称是 into <name> 如果且仅在以下情况下,则省略该部分 <name> 是字面意思 master. 这是Git中为数不多的几处以 master 得到了特殊的处理:它略微改变了默认的合并信息)。)

如果您的 Git 目录(仓库本身)在其他地方,使用 git rev-parse --git-dir 来找到它。

原始提交的哈希ID更容易得到。

$ git rev-parse MERGE_HEAD
243e415273b34b1553ce5eaeb6a189595d322015

你可以把它变成一组直接指向这个提交的分支名,用 git branch --points-at:

$ git branch --points-at MERGE_HEAD

但这 不会产生任何名字--例如,如果你运行了 git merge 上的原始哈希ID,或者分支名称从那时起就被移动了--或者它可能产生多个名称。 所以第一行的 .git/MERGE_MSG 可能是查看的地方。

顺便说一下,您可以从以下地址查看提交的内容 MERGE_HEADgit log 像往常一样。

$ git log MERGE_HEAD

这有时是一个有用的方法 看到 根据每个分支的 "腿 "上有多少个提交,来决定你要合并的内容。

$ 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

请注意 "我们 "的分支如何。HEAD 又名 B在三个点的右边有一个点。MERGE_HEAD...HEAD有些提交被标记为 > 因为他们是我们的分支。 "他们 "的分支。MERGE_HEAD 又名 A标注为:"我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我","我"。< 因为 MERGE_HEAD 是在左边的 MERGE_HEAD...HEAD.

(The --boundary 选项调整了包含在 "提交 "中的提交集。git log 输出,这样我们就可以看到这里的最后一次提交,在本例中,在 master. 否则,这个提交将被排除在 git log 产量)。)

© www.soinside.com 2019 - 2024. All rights reserved.