我正在尝试获取类似于git log
的日志信息,但具有特定于拉取请求的信息。我想获得pull请求,它只是合并到master,已经更改的文件。
例如,我有一个刚刚合并的拉取请求。 它改变了File1,File2和File4。
我还有另一个刚刚合并的拉取请求。 它改变了File1,File3。
我希望能够获取与特定拉取请求相关联的文件的名称。
我的问题是,git log --oneline
或git whatchanged -m
或git log --pretty=format:"%H" --name-only
没有按顺序显示内容,并且由于提交而难以解析。
无论如何都要检索从拉取请求编辑的文件?
答案 0 :(得分:3)
你可能想要:
git diff-tree [options] <sha>^1 <sha>
,例如,由:
制作$ git diff-tree --abbrev bdae4af8705^1 bdae4af8705
:100644 100644 50c6b2ab1... 8cc34186c... M setup.c
$ git diff-tree --name-status bdae4af8705^1 bdae4af8705
M setup.c
首先,区分拉取请求非常重要,这不是Git定义的, 1 和合并提交< / em>,这是。就Git而言,pull请求只是任何其他提交。在合并之前,您必须以某种方式查找或指定第二次提交。您正在查看的是在某些网页上点击了一些标记为&#34;合并拉取请求&#34;的点击按钮的后遗症。
我说这一切都不是迂腐, 2 但是因为这是一件好事,因为这意味着你现在有一个你通过运行获得的合并提交 git fetch
。 (如果您尚未使用git fetch
来获取合并提交,请先执行此操作。)这样可以简化问题!您不必搜索所有已合并的提交,而只需查看合并提交本身:
...
git whatchanged -m
...没有按顺序显示内容......
使用git log -m
- git whatchanged
实际上只是git log --raw
所以你正在这样做 - 这是一种可行的方式。我不清楚你的意思是什么&#34;不按顺序显示事物&#34;事实上,它以非常精确和受控的顺序显示事物,正如我们通过跑步看到的那样,例如:
git log --raw -m bdae4af87053490adad2dc9fb184d6d050d46a4c
在Git的Git存储库中:
$ git log --raw -m bdae4af87053490adad2dc9fb184d6d050d46a4c
commit bdae4af87053490adad2dc9fb184d6d050d46a4c (from 8d7fefaac4318ac3155368f475e10f97714ebd47)
Merge: 8d7fefaac 176b2d328
Author: Junio C Hamano <gitster@pobox.com>
Date: Tue Dec 19 11:33:58 2017 -0800
Merge branch 'sg/setup-doc-update'
Comment update.
* sg/setup-doc-update:
setup.c: fix comment about order of .git directory discovery
:100644 100644 50c6b2ab1... 8cc34186c... M setup.c
commit bdae4af87053490adad2dc9fb184d6d050d46a4c (from 176b2d328ccc305aa2e565c39ad7b0fb24099275)
Merge: 8d7fefaac 176b2d328
Author: Junio C Hamano <gitster@pobox.com>
Date: Tue Dec 19 11:33:58 2017 -0800
Merge branch 'sg/setup-doc-update'
Comment update.
* sg/setup-doc-update:
setup.c: fix comment about order of .git directory discovery
:000000 100644 000000000... 611ab4750... A .clang-format
:100644 100644 320e33c32... 8ce9c6b88... M .gitattributes
:000000 100644 000000000... 64e605a02... A .github/CONTRIBUTING.md
[mass snippage]
这是任何人总是会为此特定提交获得的输出:它首先将提交本身(哈希ID bdae4af87053490adad2dc9fb184d6d050d46a4c
)与其第一个父8d7fefaac4318ac3155368f475e10f97714ebd47
进行比较。此比较中只更改了一个文件,即setup.c
,已修改。
然后将提交bdae4af87053490adad2dc9fb184d6d050d46a4c
与其第二个父176b2d328ccc305aa2e565c39ad7b0fb24099275
进行比较。这次,更改并添加了许多文件。
第一个父级是 提交git merge
之前的分支的提示。第二个提交是作为git merge
的参数的提交(这是与两个父节点的正常合并;如果这是章鱼合并,则输出将继续显示针对第三个父节点的新提交,因此上)。
当Git执行合并时,它通过以下方式执行:
--ours
更改集; --theirs
更改集;和如果Git成功地将这些结合起来,Git继续自己进行新的合并提交。如果没有,它会停止并获得用户的帮助。在任何情况下,结果都是一个新的提交,带有一个新的哈希ID,其父项是--ours
提交(旧的HEAD提交)和--theirs
提交,特别是的顺序
这意味着第一个git log
输出部分精确显示了从--theirs
分支(对于合并基础)获得的那些尚未出现在--ours
分支中的更改。显示合并提交与其第二个父级的第二个git log
输出部分显示从--ours
分支(对于合并库)获得的更改,这些更改尚未存在于--theirs
分支中
一般来说,第一个这样的部分是有趣的部分。
您可以使用--name-status
或(对于git diff
/ git whatchanged
样式输出){{1}获取差异(例如,使用git log --raw
缩小它们)并以您喜欢的顺序指定合并提交哈希和第一父提交哈希,或者解析为第一父提交哈希的任何内容。
1 Git有一个git diff-tree
命令,但是当您单击Web服务器上的clicky按钮时,这不是您正在使用的命令。
2 好的,不是只是是迂腐的。 : - )