我想合并两个已经分开一段时间的分支,想知道哪些文件被修改了。
遇到了这个链接:http://linux.yyz.us/git-howto.html,它非常有用。
我遇到的比较分支的工具是:
git diff master..分支
git log master..branch
git shortlog master..branch
想知道是否有类似“git status master..branch”的东西只能看到两个分支之间不同的文件。
在不创建新工具的情况下,我认为这是您现在可以做到的最接近的方法(如果文件被多次修改,这当然会显示重复):
git diff master..branch | grep "^diff"
想知道我是否错过了什么......
要将当前分支与 main
分支进行比较:
$ git diff --name-status main
比较任意两个分支:
$ git diff --name-status firstbranch..yourBranchName
official documentation 中有更多 git diff
选项(特别是 --name-status
选项)。
尝试
$ git diff --stat --color master..branchName
这将为您提供有关每次更改的更多信息,同时仍使用相同数量的行。
如果您要以另一种方式合并,您还可以翻转分支以获得更清晰的差异图片:
$ git diff --stat --color branchName..master
config --global color.ui true
),则可以跳过 --color。 (我有 lks - 懒惰键盘综合症。)
git config --global color.ui true
- 是完整的。
fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree.
还要记住,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 reset --hard; git clean -fd
?
如果有人试图从两个分支生成差异文件:
git diff master..otherbranch > myDiffFile.diff
还有一种基于 GUI 的方法。
你可以使用 gitk。
运行: $ gitk --all 右键单击某个分支的提交,然后在弹出菜单中选择标记此提交。右键单击另一个分支的提交,然后选择区分这个 -> 标记的提交或区分标记的提交 -> 这个。
然后在右下面板中将有一个更改的文件列表,在左下面板中将有差异详细信息。
另一种选择,在这种情况下使用融合:
git difftool -d master otherbranch
这不仅允许查看文件之间的差异,还提供了一种简单的方法来指向和单击特定文件。
请注意,如果您不喜欢结果,git 可以很容易地尝试合并并避免出现任何问题。这可能比提前寻找潜在问题更容易。
如果您只在某些文件中寻找更改,那么:
git diff branch1 branch2 -- myfile1.js myfile2.js
branch1 是可选的,如果没有提供 branch1,将默认考虑您当前的分支(您所在的分支)。例如:
git diff master -- controller/index.js
在协作工作或同时处理多个功能时,上游甚至您的 master 包含未包含在您的分支中的工作,并且会错误地出现在基本差异中,这是很常见的。
如果您的上游可能已经移动,您应该这样做:
git fetch
git diff origin/master...
仅使用 git diff master 可以包含或不包含相关更改。
如果您使用 IntelliJ IDEA,您还可以将任何分支与您当前的工作分支进行比较。有关详细信息,请参阅 http://www.jetbrains.com/idea/webhelp/merging-deleting-and-comparing-branches.html#d288093e3827。这在 free edition 中也可用。
有两个分支可以说
A(您正在工作的分支)
B(您要与之比较的另一个分支)
在分支 A 中,您可以输入
git diff --color B
那么这会给你一个输出
https://i.stack.imgur.com/Xn3Pb.png
关于这一点的重要一点是
绿色文本存在于分支 A 中 红色文本存在于分支 B
这里有很多答案,但我想添加一些我常用的东西。如果您在要比较的分支之一,我通常会执行以下操作之一。为了这个答案,我们会说我们在我们的二级分支中。取决于您当时需要的视图取决于您选择的视图,但大多数时候我使用的是两者中的第二个选项。如果您要恢复到原始副本,第一个选项可能会很方便 - 无论哪种方式,都可以完成工作!
这会将 master 与我们所在的分支(次要)进行比较,原始代码将是添加的行,新代码将被视为删除的行
git diff ..master
或者
这也会将 master 与我们所在的分支(次要)进行比较,原始代码将是旧行,新代码将是新行
git diff master..
https://i.stack.imgur.com/D4mWv.png
差异将显示在 github 界面中的 url /compare/{x1}...{x2}
处,其中 x2
和 x1
是您要比较的分支/提交/标记,例如:https://github.com/http4s/http4s/compare/main...dotty
您可以在 Github Doc 中查看更多信息。
git diff revision_n revision_m
如果 revision_n
和 revision_m
是连续提交,则输出与 git show revision_m
相同
git diff --name-only rev_old rev_new
您也可以使用 visual diff。
例如,如果您使用 Sourcetree,则只需 select any two commits in log view。
(我个人更喜欢在大多数情况下使用 GUI,我将这个发布给那些可能不熟悉 GUI 选项的人。)
如果您喜欢 GUI 并使用 Windows,这里有一个简单的方法。
下载 WinMerge 将两个分支签出到不同的文件夹中 使用 WinMerge 逐个文件夹进行比较。如果其中一个分支是您正在处理的分支,您也可以轻松地进行修改。
您还可以使用 TortoiseGit 轻松比较已更改文件的分支。只需单击 Browse References 并选择要比较的分支。
例如,如果您将您的分支与 master 进行比较,您将得到一个文件列表,如果您决定将您的分支合并到 master 中,这些文件将在 master 中更改。
请记住,如果将 master 与 your-branch 以及 your-branch 与 master 进行比较,您将得到不同的结果。
不定期副业成功案例分享
git diff --name-status your_branch...master
输出自创建 your_branch 以来在 master 上发生的更改