显示在两个修订版本之间哪些文件已更改

我想合并已经分离了一段时间的两个分支,并且想知道哪些文件已被修改。

浏览了以下链接: http : //linux.yyz.us/git-howto.html ,它非常有用。

比较我遇到的分支的工具是:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

想知道是否有类似 “git status master..branch” 之类的东西,以仅查看两个分支之间不同的文件。

如果不创建新工具,我认为这是您现在可以执行的最接近的操作(如果文件被多次修改,当然会显示重复):

  • git diff master..branch | grep "^diff"

想知道我是否错过了什么...

答案

要将当前分支与master分支进行比较:

$ git diff --name-status master

比较任何两个分支:

$ git diff --name-status firstbranch..yourBranchName

官方文档中阅读git diff

尝试

$ git diff --stat --color master..branchName

这将为您提供有关每次更改的更多信息,同时仍使用相同数量的行。

如果要以其他方式合并,也可以翻转分支以更清楚地了解差异:

$ git diff --stat --color branchName..master

还请记住,git 具有便宜且易于分支的功能。如果我认为合并可能会出现问题,请为合并创建一个分支。因此,如果master具有要合并的更改,并且ba是需要 master 的代码的分支,则可以执行以下操作:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

最终结果是,在与分支合并之前,我必须尝试在一次性分支上进行合并。如果我纠缠不清,可以删除ba-merge分支并重新开始。

如果有人试图从两个分支生成差异文件:

git diff master..otherbranch > myDiffFile.diff

还有一种基于 GUI 的方法。

您可以使用gitk

  1. 跑:

    $ gitk --all
  2. 右键单击分支的提交 ,然后在弹出菜单中选择 “ 标记此提交 ”。

  3. 右键单击另一个分支的提交,然后选择Diff this-> 标为 commitDiff 标为 commit-> this

然后,右下部面板中将有一个已更改的文件列表,而左下部面板中将有 diff 详细信息。

另一种选择,在这种情况下使用融合:

git difftool -d master otherbranch

这样不仅可以查看文件之间的差异,还可以提供一种指向并单击特定文件的简便方法。

请注意,如果您不喜欢 git 的结果,可以轻松尝试合并并避免出现任何问题。这可能比预先查找潜在问题要容易。

并且,如果您仅在某些文件中寻找更改,则:

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1 是可选的,如果未提供 branch1,则默认情况下将考虑当前分支(您所在的分支)。例如:

git diff master -- controller/index.js

当进行协作或同时使用多个功能时,通常上游甚至母版中包含分支中未包含的工作,并且会错误地出现在基本差异中。

如果您的上游可能已移动,则应执行以下操作:

git fetch
git diff origin/master...

仅使用 git diff master 可以包含或不包含相关更改。

如果使用的是IntelliJ IDEA ,则还可以将任何分支与当前工作的分支进行比较。有关更多信息,请参见http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827免费版也有此功能。