RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 554061
Accepted
Sirop4ik
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 7 个回答
  • 10 Views

7 个回答

  • Voted
  1. 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.

    • 49
  2. privod
    2020-08-10T23:47:59Z2020-08-10T23:47:59Z

    如果你在 hotfix 分支,输入命令:

    git diff develop
    

    您还可以使用TortoiseGit (Windows) 或gitg (Linux) 等可视化客户端。

    • 19
  3. 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 的信息。

    • 11
  4. 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
    
    • 3
  5. AlexGlebe
    2022-08-03T02:24:40Z2022-08-03T02:24:40Z

    您添加了一个不必要的功能,但想留下一些有用的东西:

    develop --> hotfix (фича + что-то ещё)
    

    您可以通过删除不必要的功能继续(在相反的方向) 。并且不要忘记始终承诺。

    develop --> hotfix (фича + что-то ещё) --> удалили фичу , но оставили что-то ещё
    

    现在,使用命令diff您可以看到与分支的区别develop:

    git diff develop hotfix 
    

    如果你喜欢其他的一切,你可以这样做merge,如果还不喜欢,那么继续朝相同的方向删除不必要的东西。

    • 2
  6. Ihor Savchenko
    2020-08-29T06:50:21Z2020-08-29T06:50:21Z

    使用 Github Desktop,它可以从 github 站点本身下载。以可视化方式查看不同分支并相互比较非常方便。

    • 1
  7. Александр Копилов
    2022-09-23T00:00:22Z2022-09-23T00:00:22Z

    除了@aleksandr-barakin 的回答之外,如果 git diff 显示的工作表太大,您可以将 git difftool 与 --tool=<meld, kdiff3 or something> 一起使用

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5