避免检出并且与 @Marco Ponti 的答案不同的另一种选择:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
如果你的特定shell不理解$()结构,请使用反引号替代。
git diff --name-only <some-other-branch>
这个命令会显示出你当前所在分支和<some-other-branch>
之间不同的文件。这基本上是相同的命令,但请注意,你可以使用它来查找任意两个分支之间的不同文件,即使它们彼此无关。这种比较是否有用取决于你的分支拓扑结构...另外,请注意<some-other-branch>
可以是任何提交,或任何可解析为提交的东西(标签等)。 - twalberggit branch | grep '\*' | awk '{print $2}'
这将获取<notMainDev>和我的当前分支之间的分支提交。然后我可以执行 git diff --name-only <notMainDev> $(git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)。 - Raifgit diff --name-only origin/branchX $(git merge-base origin/branchX origin/master)
和 git diff --name-only branchX $(git merge-base branchX master)
的区别在于前者可以正确执行,而后者会出现 fatal: Not a valid object name branchX. fatal: ambiguous argument 'branchX': unknown revision or path not in the working tree.
的错误提示。 - jxramosgit diff --merge-base <notMainDev> --name-only <mainDev>
。 - nachtjasmin你只需要执行以下操作:
git checkout <notMainDev>
git diff --name-only <mainDev>
这将仅显示两个分支之间不同的文件名。
<mainDev>
上发生的更改。你可能想使用git diff --name-only <sha-of-branch-point>
代替,或者查看我发布的避免检出的备选答案。 - twalbergnotMainDev
将与mainDev提交保持最新状态...不过,我通常也发现查看这些差异很有用。 - Marco Pontigit rev-parse <branch-name>
命令获取 <branch-name>
分支点的 SHA 值。 - fc9.30惊讶到目前为止还没有人说过这个!
git diff main...branch
只在 分支
上查看更改
使用以下命令检查当前分支
git diff main...
感谢 jqr
这是简写形式,意思是
git diff $(git merge-base main branch) branch
因此,合并基础(分支之间最近的公共提交)和分支尖端
另外,使用origin/main
而不仅仅是master可以帮助你解决本地主分支过时的问题
git diff --name-only master..
。 - Adam我简直不敢相信有这么多方法可以做到这一点。像之前某人发布的那样,我使用whatchanged,只是使用以下参数:
git whatchanged --name-only --pretty="" origin..HEAD
这仅列出文件名,仅限于当前分支上更改的文件。
sort -u
。 - jxramos2020年11月更新:
要获取当前分支中修改的文件列表(已提交!),可以使用标准的git命令来获得最短的控制台命令:
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/
diff
有更多的选项,总体而言[tag:git-diff]非常棒;) - c69我真的很喜欢@twalberg的答案,但我不想一直打当前分支的名称。所以我用了这个:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
时得到了相同的结果。您能否提供一些反馈,说明您的答案与我提供的命令之间的优缺点? - hungerstargit diff master.. --name-only
(请注意只有两个点而不是三个)。要了解这些点的含义,请参见此答案。 - Yep_It's_Megit diff --name-only master...branch-name
我们想要进行比较的对象。
git whatchanged
似乎是一个不错的替代品。
git changed
如果您愿意假设主分支称为“master”,并且您从主分支创建其他分支,则可以将以下别名添加到您的~/.gitconfig
文件中,以使其变得容易:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
这些假设对于大多数人和大多数情况都是适用的,但你必须意识到你正在进行它们。
此外,您必须使用支持$()
的shell。很可能您的shell支持此功能。
出于某种原因,没有人提到git-tree
。请参阅https://dev59.com/PHRC5IYBdhLWcg3wD8xV#424142
git-tree
更受欢迎,因为它是一个plumbing命令;意味着应该以编程方式使用(并且可能更快)
(假设基本分支是master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
然而这将显示分支中受影响的所有文件,如果您只想查看明确修改过的文件,则可以使用--diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
也可以使用--name-status
代替--name-only
来查看文件的状态(如A
/M
/D
等)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
- HarlemSquirrel