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


当前回答

你所要做的就是:

git checkout <notMainDev>
git diff --name-only <mainDev>

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

其他回答

考虑到你在一个特性分支上,你想要检查哪些文件与master…就在这个:

git diff --name-only master

真不敢相信有这么多方法可以做到。我使用之前有人发布的whatchanged,只是带有以下参数:

git whatchanged --name-only --pretty="" origin..HEAD

这只列出了文件名,并且只列出了在当前分支上更改的文件名。

扩展@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

下面的批处理文件是基于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(它的位置在path环境中)。我实际上需要使用配置的diff工具(kdiff3)来显示实际的差异,因此替换了上面的以下bash命令:

bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"

如果真能这么简单呢?

git changed

如果您愿意假设主分支被称为“master”,并且您从master创建其他分支,那么您可以将这个别名添加到~/。Gitconfig文件使它变得简单:

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

这些假设在大多数情况下适用于大多数人,但你必须意识到你在做这些假设。

此外,您必须使用支持$()的shell。您的shell很可能支持这一点。