有没有办法查看分支中哪些文件已更改?
有没有办法查看分支中哪些文件已更改?
Answers:
@Marco Ponti的答案的替代方法,避免了结帐:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
如果您的特定外壳不了解$()构造,请改用反引号。
git diff --name-only <some-other-branch>
会向您显示当前分支和之间的文件不同<some-other-branch>
。因此,它本质上是相同的命令,但是请注意,即使它们之间没有远程关联,您也可以使用它来查找任何两个分支之间不同的文件。该比较是否有用取决于分支的拓扑结构。此外,请注意,<some-other-branch>
实际上可能是任何提交,也可能是解析为一个的任何内容(标签等)。
<notMainDev>
和<MY_CURRENT_CO_BRANCH>
最近有一个共同的祖先,和比较<notMainDev>
该祖先。不过,您必须提供您当前的分支名称,正如git merge-base
预期的那样,有两个参数-至少在当前版本中没有捷径。
git branch | grep '\*' | awk '{print $2}'
,它将获取<notMainDev>与我当前分支之间的分支的提交。然后,我可以做git diff --name-only <notMainDev> $(git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
您所要做的只是以下几点:
git checkout <notMainDev>
git diff --name-only <mainDev>
这只会显示两个分支之间不同的文件名。
<mainDev>
自分支机构分歧以来发生的变化。您可能想使用它git diff --name-only <sha-of-branch-point>
,或者查看我发布的避免结帐的替代答案。
notMainDev
以为可以与mainDev提交保持同步...我通常发现也可以很好地看到这些差异。
<sha-of-branch-point>
使用git rev-parse <branch-name>
惊讶的是到目前为止还没有说!
git diff master...branch
所以只看到更改 branch
检查当前分支使用
git diff master...
感谢jqr
这是短手
git diff $(git merge-base master branch) branch
因此合并基础(分支之间的最新公共提交)和分支提示
如果您的本地管理员过时,也可以使用Origin / master而不是master来帮助
git diff --name-only master..
如果您只想两个分支之间的文件名不同。
我不敢相信有太多方法可以做到这一点。我使用whatchanged作为以前发布的人,只是带有以下参数:
git whatchanged --name-only --pretty="" origin..HEAD
这仅列出文件名,并且仅列出在当前分支上更改的文件名。
我真的很喜欢@twalberg的答案,但我不想一直都输入当前的分支名称。所以我用这个:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
在目标分支上运行时得到过相同的结果。您是否愿意在您的答案和我提供的命令之间就好与坏之间提供任何反馈?
git diff master.. --name-only
(请注意,只有2个点而不是3个点)。要了解点的含义,请参见此答案
git diff --name-only master...branch-name
我们要与之比较。
如果可以这么简单怎么办?
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很可能支持this。
git show --stat origin/branch_name
这将为您提供在此分支下已添加或修改的文件的列表。
出于某种原因,没有人提及git-tree
。参见https://stackoverflow.com/a/424142/1657819
git-tree
首选,因为它是管道命令;意味着程序化的(并且可能更快)
(假设基本分支为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)
以下批处理文件基于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)"