获取已在git分支中修改的所有文件

Rai*_*aif 179 git branch

有没有办法看到分支中的文件发生了什么变化?

twa*_*erg 146

@Marco Ponti的答案的另一种选择,并避免结账:

git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Run Code Online (Sandbox Code Playgroud)

如果您的特定shell不理解$()构造,请改用back-ticks.

  • `git diff --name-only <some-other-branch>`将显示当前分支和`<some-other-branch>`之间的文件有何不同.所以它本质上是相同的命令,但请注意,您可以使用它来查找*any*两个分支之间不同的文件,即使它们不是远程相关的.这种比较是否有用取决于你的分支的拓扑结构......另外,注意`<some-other-branch>`实际上可以是任何提交,或任何解析为一个(标签等). (24认同)
  • 啊!这很有趣,现在如果我想让 &lt;notMainDev&gt; 成为我所在的当前分支怎么样?那是不是也得指定呢? (2认同)
  • 在 Git 2.30 及更高版本中,上述代码可以替换为 `git diff --merge-base &lt;notMainDev&gt; --name-only &lt;mainDev&gt;`。 (2认同)

Mar*_*nti 132

您所要做的就是以下内容:

git checkout <notMainDev>
git diff --name-only <mainDev>
Run Code Online (Sandbox Code Playgroud)

这将仅显示两个分支之间不同的文件名.

  • 我相信,自从分支机构分歧以来,这也将显示在"<mainDev>"上已经改变的东西.您可能希望使用`git diff --name-only <sha-of-branch-point>`,或者查看我发布的备用答案,以避免结帐. (18认同)
  • 你可以通过 `git rev-parse &lt;branch-name&gt;` 得到 `&lt;sha-of-branch-point&gt;` (3认同)

exu*_*sum 58

到目前为止还没有说过这个惊讶!

git diff master...branch
Run Code Online (Sandbox Code Playgroud)

所以只看到变化 branch

检查当前分支的使用情况

git diff master...
Run Code Online (Sandbox Code Playgroud)

感谢jqr

这是一个简而言之

git diff $(git merge-base master branch) branch
Run Code Online (Sandbox Code Playgroud)

所以合并基础(分支之间最近的常见提交)和分支提示

如果您的本地主人已过时,也可以使用origin/master而不是master

  • `git diff --name-only master..` 如果你只想要两个分支之间不同的文件名。 (5认同)
  • 更简单命令的隐含头:`git diff master ...` (4认同)
  • 虽然这显示了已更改的内容,但它显示了所有更改,而不是已更改文件的摘要...这就是导致我首先进入此页面的原因:) (3认同)
  • 如果您的主人在您创建侧分支后进行了提交,则这将无法正常工作。 (3认同)
  • 然后添加 --name-only 标志。或--短统计 (2认同)
  • @simplylizz 是的,确实如此。这正是要解决的问题 (2认同)

luk*_*ler 41

我无法相信有很多方法可以做到这一点.我使用之前发布的whatchanged,只需使用以下参数:

git whatchanged --name-only --pretty="" origin..HEAD
Run Code Online (Sandbox Code Playgroud)

这只列出了文件名,只列出了当前分支上已更改的文件名.

  • 这似乎通过仅打印分支单独进行的更改来实现我正在寻找的内容。但是它确实打印文件两次,所以我将其通过管道传输到“sort -u” (4认同)
  • 这似乎是最简单的答案,因为它不需要额外的信息.输出看起来正确,它比接受的答案更容易记住! (2认同)
  • 来自 [git 文档](https://git-scm.com/docs/git-whatchanged):`鼓励新用户改用 git-log。Whatchanged 命令本质上与 git-log 相同,但默认显示原始格式差异输出并跳过合并。 (2认同)

Yep*_*_Me 20

我真的很喜欢@ twalberg的答案,但我不想一直输入当前的分支名称.所以我用这个:

git diff --name-only $(git merge-base master HEAD)
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案对我有用,我得到了我希望看到的文件列表。我是一个 Git 新手,在目标分支上运行时使用了 `git diff master... --name-only` 并得到了相同的结果。您能否就您的答案和我提供的命令之间的好与坏提供任何反馈? (3认同)
  • 如果自您的分支创建以来 master 没有任何新的提交,您的命令将完全相同。我认为我的命令相当于 `git diff master.. --name-only` (注意只有 2 个点而不是 3 个点)。要了解这些点的含义,请参阅[此答案](/sf/answers/1693064901/) (2认同)

cha*_*asr 12

git whatchanged 似乎是一个很好的选择.

  • 我正在寻找的究竟是什么。 (2认同)

c69*_*c69 9

2020 年 11 月更新:

要获取当前分支中修改(和提交!)的文件列表,您可以使用标准使用最短的控制台命令:

git diff --name-only master...


  • 如果您的本地“master”分支已过时(在远程之后),请添加远程名称(假设它是“origin”):

    git diff --name-only origin/master...

  • 如果您还想包括未提交的更改,请删除...

    git diff --name-only master

  • 如果您使用不同的主分支名称(例如:“main”),请替换它:

    git diff --name-only main...

  • 如果你想输出到标准输出(所以它是可复制的):

    git diff --name-only master... | cat

  • 如果您希望文件名在 VSCode 终端中可点击,无论您从哪个文件夹运行此命令,请添加--relative

    git diff --name-only --relative master... | cat


每个对不同选项的非常好的详细解释https://blog.jpalardy.com/posts/git-how-to-find-modified-files-on-a-branch/


ico*_*ast 8

如果它可以像这样容易怎么办?

git changed
Run Code Online (Sandbox Code Playgroud)

如果您愿意假设主分支被称为"master",并且您从master创建了其他分支,那么您可以将此别名添加到您的~/.gitconfig文件中以使其变得如此简单:

cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这些假设对大多数人都有效,但你必须意识到你正在制造它们.

此外,您必须使用支持的shell $().你的shell很可能支持这个.


小智 5

git diff --name-only master...branch-name
Run Code Online (Sandbox Code Playgroud)

我们要与之比较。