Sirop4ik Asked:2020-08-10 23:34:48 +0000 UTC2020-08-10 23:34:48 +0000 UTC 2020-08-10 23:34:48 +0000 UTC 如何比较两个git分支? 772 我有一个分支develop,然后我需要做一个新特性,我创建了另一个分支hotfix,除了特性之外,我在这个分支中做了一些其他的事情:我重构了公共代码和其他一些东西。 现在我不再需要这个功能了,我需要删除这个分支。 我想看看这两个分支有何不同,这样我就可以记住我对代码所做的重大更改。 怎么做? git 7 个回答 Voted Best Answer aleksandr barakin 2020-08-10T23:54:55Z2020-08-10T23:54:55Z 我想看看这两个分支之间的区别 $ git diff ветка1 ветка2 从不查看差异本身开始,而是查看不同文件的列表可能会很有用: $ git diff --name-only ветка1 ветка2 以及包含每个文件状态(添加/删除/修改)的相同列表: $ git diff --name-status ветка1 ветка2 文档:man git-diff. privod 2020-08-10T23:47:59Z2020-08-10T23:47:59Z 如果你在 hotfix 分支,输入命令: git diff develop 您还可以使用TortoiseGit (Windows) 或gitg (Linux) 等可视化客户端。 Volen 2020-08-31T06:35:50Z2020-08-31T06:35:50Z Git提供灵活的工具来选择提交范围和比较分支。 您可以使用双点语法来解决您的问题。因此,您实质上是在要求 Git 在提交范围内仅包含那些可从一个分支访问但无法从另一个分支访问的提交。例如,假设您的故事如下所示: 您想查看您的实验分支中尚未合并到主分支中的内容。您可以使用 master..experiment 表示法要求 Git 仅记录此类提交,这意味着“所有可从 experiment 分支获得但不能从 master 分支获得的提交”。为了简洁明了,在这些示例中,将使用图中的字母代替实际的日志输出,并按正确的顺序排列: $ git log master..experiment D C 要查看更改,您可以在命令中使用类似的结构git diff: $ git diff master..experiment 可以使用命令的所有标准选项,git log两点git diff结构仅允许您指定应显示的提交范围。 指定提交范围的其他方法 很多点 双点符号作为速记很有用,但您可能希望使用两个以上的分支来指定所需的修订版,例如,找出哪些提交在多个分支中的任何一个分支中,但不在您当前所在的分支中上。Git 允许您通过在您不想从中看到可用提交的任何链接之前使用 ^ 符号或 --not 选项来执行此操作。因此以下三个命令是等价的: $ git log refA..refB $ git log ^refA refB $ git log refB --not refA 这种语法很方便,因为它允许您在查询中指定两个以上的引用,而这对于双点语法是不可能的。例如,如果您想查看所有可从 refA 和 refB 访问但不可从 refC 访问的提交,您可以使用以下命令之一: $ git log refA refB ^refC $ git log refA refB --not refC 三点 选择修订的最后一种基本方法是三点语法,它表示所有提交都可以从至少一个链接访问,但不能从两个链接访问。如果您想知道 master 或 experiment 中的提交是什么,但不是两者都知道,您可以运行: $ git log master...experiment F E D C 此命令再次打印正常的提交日志,但它仅包含有关这四个提交的信息,通常按日期排序。 在这种情况下,--left-right 选项通常与 log 命令一起使用,它显示每次提交的范围的一侧。这使此信息更有用: $ git log --left-right master...experiment < F < E > D > C PS 这些信息取自ProGit ( ru ) 一书。您可以从中了解更多有关使用 Git 的信息。 Eugen Konkov 2020-10-25T02:17:00Z2020-10-25T02:17:00Z 当我们想看看我们在分支中做了什么时,我们通常会比较分支。为此,我使用以下命令: git diff master...HEAD 显示我在分支中所做的一个补丁中的更改。 要查看提交列表,我使用此别名~/.gitconfig: [alias] tree = log --graph --decorate --pretty=oneline --abbrev-commit 然后查看我分支上的所有提交: git tree master..HEAD 或者像这样: git tree --left-right master...HEAD | grep '^>' 这是如果我们从 开始我们的分支master,如果你开始分支,例如,从develop,那么相应地,你应该这样做: git tree develop..HEAD AlexGlebe 2022-08-03T02:24:40Z2022-08-03T02:24:40Z 您添加了一个不必要的功能,但想留下一些有用的东西: develop --> hotfix (фича + что-то ещё) 您可以通过删除不必要的功能继续(在相反的方向) 。并且不要忘记始终承诺。 develop --> hotfix (фича + что-то ещё) --> удалили фичу , но оставили что-то ещё 现在,使用命令diff您可以看到与分支的区别develop: git diff develop hotfix 如果你喜欢其他的一切,你可以这样做merge,如果还不喜欢,那么继续朝相同的方向删除不必要的东西。 Ihor Savchenko 2020-08-29T06:50:21Z2020-08-29T06:50:21Z 使用 Github Desktop,它可以从 github 站点本身下载。以可视化方式查看不同分支并相互比较非常方便。 Александр Копилов 2022-09-23T00:00:22Z2022-09-23T00:00:22Z 除了@aleksandr-barakin 的回答之外,如果 git diff 显示的工作表太大,您可以将 git difftool 与 --tool=<meld, kdiff3 or something> 一起使用
从不查看差异本身开始,而是查看不同文件的列表可能会很有用:
以及包含每个文件状态(添加/删除/修改)的相同列表:
文档:
man git-diff
.如果你在 hotfix 分支,输入命令:
您还可以使用TortoiseGit (Windows) 或gitg (Linux) 等可视化客户端。
Git
提供灵活的工具来选择提交范围和比较分支。您可以使用双点语法来解决您的问题。因此,您实质上是在要求 Git 在提交范围内仅包含那些可从一个分支访问但无法从另一个分支访问的提交。例如,假设您的故事如下所示:
您想查看您的实验分支中尚未合并到主分支中的内容。您可以使用 master..experiment 表示法要求 Git 仅记录此类提交,这意味着“所有可从 experiment 分支获得但不能从 master 分支获得的提交”。为了简洁明了,在这些示例中,将使用图中的字母代替实际的日志输出,并按正确的顺序排列:
要查看更改,您可以在命令中使用类似的结构
git diff
:可以使用命令的所有标准选项,
git log
两点git diff
结构仅允许您指定应显示的提交范围。指定提交范围的其他方法
很多点
双点符号作为速记很有用,但您可能希望使用两个以上的分支来指定所需的修订版,例如,找出哪些提交在多个分支中的任何一个分支中,但不在您当前所在的分支中上。Git 允许您通过在您不想从中看到可用提交的任何链接之前使用 ^ 符号或 --not 选项来执行此操作。因此以下三个命令是等价的:
这种语法很方便,因为它允许您在查询中指定两个以上的引用,而这对于双点语法是不可能的。例如,如果您想查看所有可从 refA 和 refB 访问但不可从 refC 访问的提交,您可以使用以下命令之一:
三点
选择修订的最后一种基本方法是三点语法,它表示所有提交都可以从至少一个链接访问,但不能从两个链接访问。如果您想知道 master 或 experiment 中的提交是什么,但不是两者都知道,您可以运行:
此命令再次打印正常的提交日志,但它仅包含有关这四个提交的信息,通常按日期排序。
在这种情况下,--left-right 选项通常与 log 命令一起使用,它显示每次提交的范围的一侧。这使此信息更有用:
PS 这些信息取自ProGit ( ru ) 一书。您可以从中了解更多有关使用 Git 的信息。
当我们想看看我们在分支中做了什么时,我们通常会比较分支。为此,我使用以下命令:
显示我在分支中所做的一个补丁中的更改。
要查看提交列表,我使用此别名
~/.gitconfig
:然后查看我分支上的所有提交:
或者像这样:
这是如果我们从 开始我们的分支
master
,如果你开始分支,例如,从develop
,那么相应地,你应该这样做:您添加了一个不必要的功能,但想留下一些有用的东西:
您可以通过删除不必要的功能继续(在相反的方向) 。并且不要忘记始终承诺。
现在,使用命令
diff
您可以看到与分支的区别develop
:如果你喜欢其他的一切,你可以这样做
merge
,如果还不喜欢,那么继续朝相同的方向删除不必要的东西。使用 Github Desktop,它可以从 github 站点本身下载。以可视化方式查看不同分支并相互比较非常方便。
除了@aleksandr-barakin 的回答之外,如果 git diff 显示的工作表太大,您可以将 git difftool 与 --tool=<meld, kdiff3 or something> 一起使用