Rom*_*kov 2 git git-merge merge-conflict-resolution
我已经开始合并,但它已经解决了冲突,现在它已经准备好了提交.我只想仔细检查我合并了哪些父修订版.
迄今为止尝试的事情:
git show 使用%P格式说明符 - 除了我无法弄清楚如何让它告诉我未提交合并的父母git rev-list 有各种选择,无济于事hg parents,这让我回到了git rev-list但没有成功:它列出了五个修订版,它没有列出我实际传递给的修订版git merge <rev>git commit 并查看提交消息最后一个是唯一真正有用的选项,除了它只显示我未提交的合并的父项之一.
必须有一个更好的方式git commit!我该怎么做呢?
请注意,由于合并提交尚不存在,您将无法使用git log或git 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)