有没有办法查看分支中哪些文件发生了变化?
答案 0 :(得分:125)
@Marco Ponti的答案的另一种选择,并避免结帐:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
如果您的特定shell不理解$()构造,请改用back-ticks。
答案 1 :(得分:113)
您需要做的就是:
git checkout <notMainDev>
git diff --name-only <mainDev>
这将只显示两个分支之间不同的文件名。
答案 2 :(得分:49)
git diff master...branch
因此,请仅在branch
检查当前分支使用
git diff master...
感谢jqr
这是
的简写git diff $(git merge-base master branch) branch
所以合并基础(分支之间最近的常见提交)和分支提示
如果您的本地主人约会
,也可以使用origin / master而不是master答案 3 :(得分:36)
我无法相信有很多方法可以做到这一点。我使用之前发布的内容,只需使用以下参数:
git whatchanged --name-only --pretty="" origin..HEAD
这只列出了文件名,只列出了当前分支上的文件名。
答案 4 :(得分:17)
我真的很喜欢@ twalberg的答案,但我不想一直输入当前的分支名称。所以我用这个:
git diff --name-only $(git merge-base master HEAD)
答案 5 :(得分:11)
git whatchanged
似乎是一个不错的选择。
答案 6 :(得分:8)
如果这么简单怎么办?
git changed
如果您愿意假设主分支被调用&#34; master&#34;,并且您从master创建了其他分支,那么您可以将此别名添加到~/.gitconfig
文件使这很容易:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
这些假设在大多数情况下适用于大多数人,但您必须意识到自己正在制作它们。
此外,您必须使用支持$()
的shell。 It's very likely that your shell supports this
答案 7 :(得分:4)
git show --stat origin/branch_name
这将为您提供已在此分支下添加或修改的文件列表。
答案 8 :(得分:1)
git diff --name-only master ... branch-name
我们想要比较。
答案 9 :(得分:1)
可接受的答案-git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
-非常接近,但我注意到删除状态为错误。我在分支中添加了一个文件,但是此命令(使用--name-status
)给了我删除了“ A”状态的文件和添加了“ D”状态的文件。
我不得不改用以下命令:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
答案 10 :(得分:1)
考虑到您位于功能分支上,并且想要检查与主文件相比哪些文件已发生更改……仅此:
git diff --name-only master
答案 11 :(得分:1)
2020年11月更新:
要获取当前分支中已修改(并提交!)的文件列表,您可以使用标准git的最短控制台命令:
git diff --name-only master...
如果您本地的“ master”分支已经过时(在远程后面),请添加一个远程名称(假设其“来源”)
git diff --name-only origin/master...
如果还要包含未提交的更改,请删除...
:
git diff --name-only master
如果您使用其他主分支名称(例如:“ main”),请用它代替:
git diff --name-only origin/main...
如果要输出到stdout(因此可复制)
git diff --name-only master... | cat
对不同选项https://blog.jpalardy.com/posts/git-how-to-find-modified-files-on-a-branch/
的详细解释非常好答案 12 :(得分: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
答案 13 :(得分: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)"
答案 14 :(得分:0)
我使用 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
答案 15 :(得分:0)
由于某种原因,没有人提到git-tree
。参见https://stackoverflow.com/a/424142/1657819
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
等)>