我已经开始合并,但它已经解决了冲突,现在它已经准备好提交了。我只想仔细检查我合并了哪些父版本。
到目前为止所做的事情:
git show
使用%P格式说明符 - 除了我无法弄清楚如何让它告诉我未提交合并的父母git rev-list
有多种选择,但无济于事hg parents
的git,brings me back to git rev-list
但没有成功:它列出了五个修订版,但未能列出我实际传递给{的修订版{ {1}} git merge <rev>
并查看提交消息最后一个是唯一可行的选项,除了它只显示我未提交合并的父项之一。
必须有比git commit
更好的方法!我该怎么做呢?
答案 0 :(得分:5)
请注意,由于合并提交尚不存在,您将无法将git log
或git show
与%P
格式说明符(对应于父哈希值)一起使用)访问未来合并提交的父母。
如果将一个分支简单合并到另一个分支,则可以运行
git log -n 1 --pretty=format:"%H"
git log -n 1 --pretty=format:"%H" MERGE_HEAD
将打印
的完整SHA分别
如果在章鱼合并期间出现任何冲突,包括将多个分支合并到另一个分支,Git将中止合并;因此,您的问题通常不适用于该案件。正如安德鲁在his comment中指出的那样,--no-commit
标志可用于故意中断合并,即使它没有冲突。但是,在这种情况下,运行
git log -n 1 --pretty=format:"%H" MERGE_HEAD
只会打印正在合并的分支的一个的SHA;它不会列出那些分支的所有的SHA。
但是,一切都没有丢失;有一种方法可以打印所有这些。事实证明,.git/MERGE_HEAD
文件包含所有正在合并的分支的SHA;因此,更健壮的方法包括简单地转储该文件的内容:
cat .git/MERGE_HEAD
为了解决问题,这里是一个(自愿设计)中断章鱼合并的例子:
# 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