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

有没有办法看到哪些文件已经改变了分支?

@Marco Ponti的答案的替代scheme,并避免结帐:

git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>) 

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

所有你需要做的是以下几点:

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

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

惊讶这至今没有说过!

 git diff master...branch 

所以只能在branch上看到更改

检查当前分支的使用情况

 git diff master... 

感谢jqr

这是短暂的

 git diff $(git merge-base master branch) branch 

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

同时使用起源/主人而不是主人将有助于当地的主人约会

我不敢相信有这么多的方法来做到这一点。 我使用之前发布的内容,只是使用以下参数:

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

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

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

 git diff --name-only $(git merge-base master HEAD) 

如果它可以像这样简单呢?

 git changed 

如果你愿意假定主分支被称为“主”,并且你从主创build你的其他分支,那么你可以将这个别名添加到你的~/.gitconfig文件中,这样做很简单:

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

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

另外,你必须使用一个支持$()的shell。 这很可能是你的shell支持这个 。

git whatchanged似乎是一个很好的select。

 git show --stat origin/branch_name 

这会给你一个在这个分支下已经添加或修改的文件列表。

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

下面的batch file是基于twalberg的答案,但将在Windows中工作:

 @ECHO OFF C: :: <== OR USE A DIFFERENT DRIVE CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH SET /pb="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(并且它的位置在path环境中)时包含了git bash。 我实际上需要使用configuration的diff工具(kdiff3)来显示实际的差异,所以用上面的bash命令代替:

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

我使用grep,所以我只得到与diff –git这是文件path的行:

 git diff branchA branchB | grep 'diff --git' // OUTPUTS ALL FILES WITH CHANGES, SIMPLE HA :) diff --git a/package-lock.json b/package-lock.json