我想合并两个已分开一段时间的分支,并想知道哪些文件已被修改。
碰到这个链接: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
中的official documentation。
如果您使用的是IntelliJ IDEA,您还可以将任何分支与当前工作分支进行比较。有关更多信息,请参阅http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827。这也可以在free edition中找到。
这里有很多答案,但我想添加一些我常用的东西。如果您位于要比较的分支之一,我通常会执行以下操作之一。为了这个答案,我们会说我们在二级分支机构。取决于您当时所需的视图取决于您选择的视图,但大部分时间我使用的是第二个选项。如果您尝试恢复原始副本,第一个选项可能很方便 - 无论哪种方式,都可以完成工作!
这将比较master和我们所在的分支(这是次要的),原始代码将是添加的行,新代码将被视为已删除的行
git diff ..master
要么
这也将比较master和我们所在的分支(这是次要的),原始代码将是旧行,新代码将是新行
git diff master..
如果你喜欢GUI并使用Windows,这是一个简单的方法。
git diff revision_n revision_m
如果revision_n
和revision_m
是连续提交,那么它输出与git show revision_m
相同
对于正在寻找GUI解决方案的人来说,Git Cola有一个非常好的“分支差异查看器(差异 - >分支......)。
你也可以使用visual diff。
例如,如果您使用Sourcetree,您可以简单地使用select any two commits in log view。
(在大多数情况下,我个人更喜欢使用GUI,而且我会为那些可能不熟悉GUI选项的人发布这个。)
您还可以使用TortoiseGit轻松比较已更改文件的分支。只需单击Browse References并选择要比较的分支。
例如,如果您将分支与master进行比较,那么如果您决定将分支合并为master,则将获得将在master中更改的文件列表。
请记住,如果将master与your-branch和your-branch与master进行比较,则会得到不同的结果。
尝试
$ 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
分支并重新开始。
如果有人试图从两个分支生成diff文件:
git diff master..otherbranch > myDiffFile.diff
还有一种基于GUI的方法。
你可以使用gitk。
$ gitk --all
然后,右下方面板中将显示已更改的文件列表,左下方面板中将显示diff详细信息。
还有一个选择,在这种情况下使用meld:
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可以包含或不包含相关更改。