如何在不知道分支名称或跟踪内容的情况下获取要由`git pull`更新的文件列表?

mes*_*shy 15 git

如何获取即将更新(或刚刚更新)的文件列表,git pull以便我可以解析它们并在脚本中采取适当的操作?

这个看似相似的问题的接受答案告诉我,我可以获得一份提交列表

git fetch && git log master..origin/master
Run Code Online (Sandbox Code Playgroud)

但这对我没有好处,因为我需要一个文件列表,而我的脚本不能假设分支是master或当前分支正在跟踪origin/master.

通过一些实验(以及@ Jonathan的评论),我发现了这一点

git fetch && git diff master origin/master --name-only
Run Code Online (Sandbox Code Playgroud)

几乎就在那里,但现在我需要找到一种方法来获取当前分支及其跟踪的内容,以便我可以执行类似这样的操作(python):

"git fetch && git diff %s %s --stat" % (this_branch, tracked_branch)
Run Code Online (Sandbox Code Playgroud)

我觉得我最喜欢那里,因为现在我只需要知道如何获得当前分支及其跟踪的内容,但我已经给出了更广泛的背景,希望有人知道更简单的方法解决这个问题(git incoming --files会很好;)

obm*_*arg 13

假设您知道遥控器的名称(在我的示例中,来源),那么您可以简单地去:

git fetch && git diff --name-only ..origin

templates/shows/showBase.html
templates/shows/showList.html
templates/shows/showListEntry.htm
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要分类为单个提交,您可以使用whatchanged:

git fetch && git whatchanged --name-only ..origin

commit fcb1b56d564fe85615ecd6befcd82f6fda5699ae
Author: Grambo <email@email>
Date:   Mon Dec 12 23:36:38 2011 +0000

    Hooked "I've Seen This" button up to "Review Show" dialog

templates/shows/showBase.html
templates/shows/showList.html
templates/shows/showListEntry.htm

commit xasdasdsada......
Run Code Online (Sandbox Code Playgroud)


A.H*_*.H. 6

比@obmarg 的答案更通用的解决方案是:

git fetch && git diff --name-only @ @{u}
Run Code Online (Sandbox Code Playgroud)

@是一个快捷方式,HEAD它反过来是指向您当前签出的分支的指针。@{u}@{upstream}表示 的跟踪分支HEAD。因此,不需要对当前分支 ( master)、远程 ( origin) 的名称或跟踪分支 ( origin/master)的名称进行硬编码假设。

如果您想在另一个分支上执行此操作,请使用以下命令:

git fetch && git diff --name-only master master@{u}
Run Code Online (Sandbox Code Playgroud)

的语法在@{u}中解释git help revisions,搜索upstream