Git 如何获取请求的提交和文件列表?(不通过用户界面)

Git 如何获取请求的提交和文件列表?(不通过用户界面),git,github,Git,Github,我正在尝试获取类似于git log的日志信息,但其中包含专门针对pull请求的信息。我想得到pull请求的,刚刚合并到master中的,被更改的文件 例如,我有一个刚刚合并的请求。 它更改了文件1、文件2和文件4 我还有一个刚刚合并的请求。 它改变了文件1,文件3 我希望能够获得与特定拉取请求相关的文件名 我的问题是git log--oneline或git whatchanged-m或git log--pretty=format:“%H”--仅名称不能按顺序显示,而且由于提交,很难解析 是否仍然

我正在尝试获取类似于git log的日志信息,但其中包含专门针对pull请求的信息。我想得到pull请求的,刚刚合并到master中的,被更改的文件

例如,我有一个刚刚合并的请求。 它更改了文件1、文件2和文件4

我还有一个刚刚合并的请求。 它改变了文件1,文件3

我希望能够获得与特定拉取请求相关的文件名

我的问题是
git log--oneline
git whatchanged-m
git log--pretty=format:“%H”--仅名称
不能按顺序显示,而且由于提交,很难解析

是否仍然可以检索从拉取请求编辑的文件?

TL;博士 您可能想要:

git diff-tree [options] <sha>^1 <sha>
长的 首先,区分不是Git定义的pull请求和合并提交是很重要的。就Git而言,pull请求只是任何其他提交。在合并之前,您必须以某种方式查找或指定第二个提交。您所看到的是,在某些网页上单击了标记为“合并请求”的clicky按钮后的后果

我说所有这些都不是迂腐的,2但因为这是一件好事,因为这意味着您现在有了一个通过运行
git fetch
获得的合并提交。(如果您尚未使用
git fetch
获取合并提交,请先执行该操作。)这简化了问题!您可以只查看合并提交本身,而不必搜索合并的所有提交:

git whatchanged-m
。。。不按顺序显示事物

使用
git-log-m
-
git-whatchanged
实际上就是
git-log-raw
,所以这是一种方法。我不清楚你所说的“不按顺序显示事物”是什么意思:事实上,它以非常精确和受控的顺序显示事物,我们可以通过运行看到,例如:

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]
$git log-raw-m bdae4af87053490adad2dc9fb184d6d050d46a4c
提交BDAE4AF87053490AD2DC9FB184D6D050D46A4(来自8d7fefaac4318ac3155368f475e10f97714ebd47)
合并:8d7fefaac 176b2d328
作者:Junio C Hamano
日期:2017年12月19日星期二11:33:58-0800
合并分行“sg/设置文件更新”
评论更新。
*sg/设置文件更新:
setup.c:修复关于.git目录发现顺序的注释
:100644 100644 50c6b2ab1。。。8cc34186c。。。M setup.c
提交BDAE4AF87053490AD2DC9FB184D6D050D46A4(来自176b2d328ccc305aa2e565c39ad7b0fb24099275)
合并:8d7fefaac 176b2d328
作者:Junio C Hamano
日期:2017年12月19日星期二11:33:58-0800
合并分行“sg/设置文件更新”
评论更新。
*sg/设置文件更新:
setup.c:修复关于.git目录发现顺序的注释
:000000 100644 000000000... 611ab4750。。。叮当声格式
:100644 100644 320e33c32。。。8ce9c6b88。。。M.gitattributes
:000000 100644 000000000... 64e605a02。。。A.github/contribution.md
[大规模狙击]
这是任何人都会为此特定提交获得的输出:它首先将提交本身(哈希ID
bdae4af87053490adad2dc9fb184d6d50d46a4c
)与其第一个父级
8d7fefaac4318ac3155368f475e10f97714ebd47
。在此比较中,只有一个文件发生了更改,即
setup.c
,该文件已被修改

然后,它将commit
BDAE4AF87053490ADAD2DC9FB184D6D050D46A4
与其第二个父级
176B2D328CCC305AA2E565C3939AD7B0FB24099275
进行比较。这一次,更改和添加了许多文件

第一个父级是提交,它是
git merge
之前的分支的尖端。第二个提交是提交,它是git merge的参数(这是一个具有两个父级的正常合并;如果这是一个八达通合并,则输出将继续显示针对第三个父级的新提交,依此类推)

Git执行合并时,通过以下方式执行:

  • 定位合并基提交(或者在某些罕见的情况下,当存在多个合并基时,构建用作合并基的新提交)
  • 将合并基提交与当前(头)提交进行比较,获得
    --ours
    更改集
  • 将合并基提交与另一个提交进行比较(假设标准的两次提交合并),获得
    --theres
    更改集;及
  • 将这两个变更集中的变更合并到基础中
如果Git自己成功地组合了这些,Git也会自己进行新的合并提交。如果没有,它将停止并从用户那里获得帮助。在任何情况下,结果都是一个新的提交,带有一个新的散列ID,其父代是
--ours
提交(旧头提交)和
--theres
提交,具体顺序是这样的

这意味着第一个
git日志
输出部分精确地显示了从
--他们的
分支(相对于合并基)获得的、在
--我们的
分支中尚未出现的更改。第二个
git日志
输出部分显示了合并提交与第二个父级的比较,显示了从
--ours
分支(与合并基)获得的更改,这些更改尚未出现在
--theres
分支中

一般来说,第一个这样的部分是有趣的

您可以使用
git diff
或(对于
git whatchanged
/
git log--raw
样式输出)
git diff tree
并指定合并提交散列和第一个父提交散列,仅获取diff(并使用
--name status
对其进行收缩),或者任何决定
$ 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]