显示两个版本之间更改了哪些文件

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

找到了这个链接:http://linux.yyz.us/git-howto.html,非常有用。

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

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

想知道是否有像“git statesmaster…分支”这样的东西只能看到两个分支之间不同的文件。

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

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

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

853300 次浏览

请注意,如果您不喜欢结果,git可以轻松尝试合并并远离任何问题。这可能比提前寻找潜在问题更容易。

将当前分支与main分支进行比较:

$ git diff --name-status main

要比较任意两个分支:

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

官方留档中有更多git diff选项(特别是#1选项)。

试试看

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

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

如果您要以另一种方式合并,您还可以翻转分支以获得更清晰的差异图片:

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

还要记住,git具有廉价且简单的分支。如果我认为合并可能有问题,我会为合并创建一个分支。因此,如果master有我想要合并的更改,而ba是我的分支,需要master的代码,我可能会执行以下操作:

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

最终的结果是,我必须在破坏我的分支之前尝试在一个一次性分支上合并。如果我把自己弄乱了,我可以删除ba-merge分支并重新开始。

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

git diff master..otherbranch > myDiffFile.diff

如果您使用的是IntelliJ IDEA,您还可以将任何分支与当前工作分支进行比较。有关详细信息,请参阅http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827。这在免费版中也可用。

还有一种基于GUI的方法。

您可以使用gitk

  1. 运行:

    $ gitk --all
  2. Right click on a commit of a branch and select Mark this commit in the pop-up menu.

  3. Right click on a commit of another branch and select Diff this -> marked commit or Diff marked commit -> this.

Then there will be a changed files list in the right bottom panel and diff details in the left bottom panel.

还有一个选择,在这种情况下使用meld:

git difftool -d master otherbranch

这不仅允许查看文件之间的差异,还提供了一种指向和单击特定文件的简单方法。

当协同工作时,或者同时处理多个功能时,上游甚至您的主服务器通常包含不包含在您的分支中的工作,并且会错误地出现在基本差异中。

如果您的上游可能已经移动,您应该这样做:

git fetchgit diff origin/master...

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

如果您只在某些文件中寻找更改,那么:

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

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

git diff master -- controller/index.js

有两个分支让我们说

  • A(您正在工作的分支)
  • B(另一个你想比较的分支)

在分支A你可以打字

git diff --color B

那么这将给你一个输出

在此处输入图片描述

重要的一点是

  1. 绿色的文本在分支A中存在

  2. 红色的文本出现在分支B中

这里有很多答案,但我想添加一些我常用的东西。如果你在你想比较的分支之一,我通常会做以下之一。为了这个答案,我们会说我们在我们的二级分支。取决于你当时需要什么视图将取决于你选择的视图,但大多数时候我使用的是两个选项中的第二个选项。如果你试图恢复到原始副本,第一个选项可能会很方便-无论哪种方式,都能完成工作!

这将比较master和我们所在的分支(二级分支),原始代码将是添加的行,新代码将被视为删除的行

git diff ..master

这也会将master与我们所在的分支(次要分支)进行比较,原始代码将是旧行,新代码将是新行

git diff master..

您还可以使用例如TortoiseGit轻松比较更改文件的分支。只需单击浏览参考资料并选择要比较的分支。

例如,如果您将你的分支大师进行比较,您将获得一个结果列表,其中包含如果您决定将你的分支合并为大师,将在大师中更改的文件。

请记住,如果将大师你的分支你的分支大师进行比较,您将获得不同的结果。

如果你喜欢GUI并且正在使用Windows,这里有一个简单的方法。

  1. 下载WinMerge
  2. 将两个分支签出到不同的文件夹中
  3. 使用WinMerge逐个文件夹进行比较。如果其中一个分支是您正在处理的分支,您也可以轻松进行修改。
git diff revision_n revision_m

如果revision_nrevision_m是连续提交,则输出与git show revision_m

对于正在寻找GUI解决方案的人来说,gitcola有一个非常好的“分支差异查看器”(Diff->树枝…)。

您也可以使用视觉差异

例如,如果您使用源树,您可以简单地在日志视图中选择任意两个提交

(我个人更喜欢在大多数情况下使用GUI,我发布这个给那些可能不熟悉GUI选项的人。

如果您使用的是Github/Github Enterprise,您可以通过点击存储库路径的url/compare来使用Web UI,例如https://github.com/http4s/http4s/compare。您可以选择要比较的分支/提交/标签:Github比较截图

diff将在url/compare/{x1}...{x2}的github界面中呈现,其中x2x1是您要比较的分支/提交/标签,例如:https://github.com/http4s/http4s/compare/main...dotty

你可以在githubdoc中看到更多。