如何找出正在进行的合并的父修订版?

Rom*_*kov 2 git git-merge merge-conflict-resolution

我已经开始合并,但它已经解决了冲突,现在它已经准备好了提交.我只想仔细检查我合并了哪些父修订版.

迄今为止尝试的事情:

  • git show 使用%P格式说明符 - 除了我无法弄清楚如何让它告诉我未提交合并的父母
  • git rev-list 有各种选择,无济于事
  • 谷歌搜索相当于一个git hg parents,这让我回到了git rev-list但没有成功:它列出了五个修订版,它没有列出我实际传递给的修订版git merge <rev>
  • git commit 并查看提交消息

最后一个是唯一真正有用的选项,除了它只显示我未提交的合并的父项之一.

必须有一个更好的方式git commit!我该怎么做呢?

jub*_*0bs 5

请注意,由于合并提交尚不存在,您将无法使用git loggit show使用%P格式说明符(对应于父哈希)来访问未来合并提交的父级.

简单合并

如果将一个分支简单合并到另一个分支,则可以运行

git log -n 1 --pretty=format:"%H"
git log -n 1 --pretty=format:"%H" MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)

这将打印完整的SHAs

  • 当前分支的一角,和
  • 合并的分支,

分别.

八达通合并

如果章鱼合并期间出现任何冲突,包括将多个分支合并到另一个分支,Git将中止合并; 因此,您的问题通常不适用于该案件.正如安德鲁在评论中指出的那样,该--no-commit标志可用于故意中断合并,即使它没有冲突.但是,在那种情况下,运行

git log -n 1 --pretty=format:"%H" MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)

只打印正在合并的其中一个分支的SHA ; 它不会列出所有这些分支的SHA .

但是,一切都没有丢失; 有一种方法可以打印所有这些.事实证明,该.git/MERGE_HEAD文件包含所有正在合并的分支的SHA ; 因此,更健壮的方法包括简单地转储该文件的内容:

cat .git/MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)

为了解决想法,这里是一个(自愿设计)中断章鱼合并的例子:

# set things up
$ mkdir test_octopuss
$ cd test_octopuss
$ git init

# create an initial commit
$ printf "foo\n" > README.md
$ git add README.md
$ git commit -m "add 'foo' in README"

# create three different commits on branches whose tips count the root commit as parent
$ printf "bar\n" >> README.md 
$ git commit -am "add 'bar' in README"
$ git checkout -b another master^
$ printf "bar\n" >> README.md 
$ git commit -am "add 'bar' in README"
$ git checkout -b yetanother master^
$ printf "bar\n" >> README.md 
$ git commit -am "add 'bar' in README"

# get our bearings
$ git log --oneline --graph --all --decorate
* 93e4667 (HEAD, yetanother) add 'bar' in README
| * a114920 (another) add 'bar' in README
|/  
| * 7adc927 (master) add 'bar' in README
|/  
* bc400cd add 'foo' in README

# merge using the --no-commit flag (to pretend that the merge failed)
$ git merge --no-commit master another
Trying simple merge with master
Trying simple merge with another
Automatic merge went well; stopped before committing as requested

# the following command fails to list all the heads being merged in
$ git log -n 1 --pretty=format:"%H" MERGE_HEAD
7adc927d9f7a0c8864d0ff784c0c53b0ded00616

# list of all the heads being merged in the current branch
$ cat .git/MERGE_HEAD
7adc927d9f7a0c8864d0ff784c0c53b0ded00616
a114920072210417a1fa6c9b2b33b5729097ee93
Run Code Online (Sandbox Code Playgroud)

  • 对于正在进行的 octopus-merge 情况,MERGE_HEAD 将包含多个 SHA(每行一个)。您可以使用“git merge --no-commit”强制发生这种情况。请注意,“git rev-parse MERGE_HEAD”仅报告第一个 sha,常规“cat .git/MERGE_HEAD”显示所有这些。 (2认同)