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

361
有没有一种方法可以查看分支中哪些文件发生了更改?

6
可能是重复问题:如何找出分支中已修改的文件? - Matt Ball
2
他们不是我的员工,而是我的同事,重点并不在于他们个人,而是普遍的人。但是,重新阅读这篇文章,它似乎有点过于激动了。 :) - Raif
4
你可以使用GitHub、Bitbucket或GitLab等工具来管理这种情况。开发者会创建一个拉取请求,你将得到该请求并可以访问一个很好的界面,此界面将展示每个文件所做出的所有更改的差异。你甚至可以进行评论、要求更改等操作。当更改确认无误后,你可以接受该请求,这将将更改合并到请求的分支(通常为develop)。这是处理这种情况的最佳实践方式。 - Scott Wright
这个回答解决了你的问题吗?如何找出分支中已修改的文件? - mahen3d
17个回答

3
git show --stat origin/branch_name

这将为您提供在此分支下添加或修改的文件列表。

5
这是错误的,这只显示了该分支最新提交中更改的文件,并非整个分支。 - davidtbernal

3

如果你在一个功能分支上,并想要检查相对于主分支(master)发生了哪些文件变化,只需要这样做:

git diff --name-only master

3

关于什么?

git diff --name-only HEAD~1

2
接受的答案 - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>) - 非常接近正确,但我注意到它在删除方面的状态是错误的。我在一个分支中添加了一个文件,然而这个命令(使用--name-status)给了我删除的文件“A”状态和我添加的文件“D”状态。
我必须使用这个命令:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)

1
我使用 grep,这样我只会得到带有 diff --git 的行,它们是文件路径:
git diff branchA branchB | grep 'diff --git'
// OUTPUTS ALL FILES WITH CHANGES, SIMPLE HA :)
diff --git a/package-lock.json b/package-lock.json

0
以下批处理文件基于twalberg的答案,但将适用于Windows操作系统:
@ECHO OFF
C:                               :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are  :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE

上述假设主分支是origin/master,并且在安装Git时包含了git bash(并且其位置在路径环境中)。实际上,我需要使用配置的差异工具(kdiff3)来显示实际的差异,因此替换了上面的bash命令。
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"

0

基于@twalberg和@iconoclast所说的内容,如果出于某些原因你正在使用cmd,那么你可以使用:

FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接