我已经开始合并,但它有冲突,我已经解决了,现在一切都已准备好提交。我只是想仔细检查我合并了哪些父版本。
到目前为止尝试过的事情:
-
git show
使用 %P 格式说明符 - 除了我不知道如何让它告诉我未提交合并的父母
-
git rev-list
有各种选择,但无济于事
- 谷歌搜索 git 相当于
hg parents
, which 让我回到git rev-list https://stackoverflow.com/a/9473819/33080但没有成功:它列出了five修订版,并且它未能列出我实际传递到的修订版git merge <rev>
-
git commit
并查看提交消息
最后一个是唯一真正有效的选项,除了它只显示我未提交的合并的父级之一。
一定有比这更好的方法git commit
!我该如何正确地做到这一点?
请注意,由于合并提交尚不存在,因此您将无法使用git log
or git show
与%P
格式说明符(对应于父哈希)来访问未来合并提交的父项。
简单合并
如果将一个分支简单合并到另一个分支,您可以运行
git log -n 1 --pretty=format:"%H"
git log -n 1 --pretty=format:"%H" MERGE_HEAD
这将打印完整的 SHA
分别。
章鱼合并
如果在 octopus 合并(涉及将多个分支合并到另一个分支)过程中出现任何冲突,Git 将中止合并;因此,您的问题通常不适用于这种情况。正如安德鲁所指出的他的评论 https://stackoverflow.com/questions/26085248/how-to-find-out-parent-revisions-of-an-in-progress-merge/26086393#comment40881731_26086393,不过,--no-commit
flag 可用于有意中断合并,即使它没有冲突。但是,在这种情况下,运行
git log -n 1 --pretty=format:"%H" MERGE_HEAD
只会打印 SHAone被合并的分支机构;它不会列出 SHAall那些分支。
不过,一切并没有失去;有一种方法可以打印所有这些。事实证明,.git/MERGE_HEAD
文件包含的 SHAall正在合并的分支;因此,更可靠的方法是简单地转储该文件的内容:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)