当前位置:   article > 正文

git 如何比较不同分支的差异_比较git develop分支和特色分支差别

比较git develop分支和特色分支差别

前两天,良许在做集成的时候碰到了一件闹心事。事情是这样的,良许的一位同事不小心把一个错误的 dev 分支 merge 到了 master 分支上,导致了良许编译不通过。于是,我们需要将版本回退到 merge 之前的状态。

如果是下面这个状态,那很好处理:

这种情况下,我们只需一个 git reset 命令即可:

git reset --hard HEAD~

    但是,如果下面这种状态,情况就没那么简单了:

    这种情况下,就不能简单使用 git reset 命令了。这就是良许这次碰到的问题。为了解决这个问题,我们就需要找出合并后的分支与合并前的分支的差异,再进行版本回退。这种情况下的版本回退,就不能单用 git reset 了,而是要配合 git revert 了,在后面我们将详细介绍如何优雅的进行版本回退。

    回到正题,我们如何找出合并后的分支与合并前分支的差异呢?这里我们需要使用到 git log 命令了。我们先模拟出这两个分支的提交情况:

    • dev 分支提交情况:
    [alvin@VM_0_16_centos git-log]$ git log dev
    commit b191410906ae20a865fde3f163bb01fd6cfc1f11
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 21:03:13 2018 +0800
    
        [dev] 版本6
    
    commit 793c9582ab0a45c4f8f548be36c06bc5ca427c62
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 21:02:30 2018 +0800
    
        [dev] 版本5
    
    commit dbe54166608772486408c1dea05304de45dba430
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 21:00:27 2018 +0800
    
        [both] 版本3
    
    commit 31894364b1396b00d2935373387397ef930416e4
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 20:59:26 2018 +0800
    
        [both] 版本2
    
    commit 4872f653a8fd7c8541abb4a292d628dc7625884b
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 20:58:05 2018 +0800
    
        [dev] 版本4
    
    commit fac6c60ed28c5acfcd01284336d4201cc55ee2e7
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 20:57:01 2018 +0800
    
        [both] 版本1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • master 分支提交情况:
    [alvin@VM_0_16_centos git-log]$ git log master
    commit c690054c67b833b22dce4120899526743b20d36d
    Author: Liangxu <yychuyu@163.com>
    Date:   Sun Dec 9 07:31:47 2018 +0800
    
        [master] 版本7
    
    commit dbe54166608772486408c1dea05304de45dba430
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 21:00:27 2018 +0800
    
        [both] 版本3
    
    commit 31894364b1396b00d2935373387397ef930416e4
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 20:59:26 2018 +0800
    
        [both] 版本2
    
    commit fac6c60ed28c5acfcd01284336d4201cc55ee2e7
    Author: Liangxu <yychuyu@163.com>
    Date:   Sat Dec 8 20:57:01 2018 +0800
    
        [both] 版本1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这些提交里 [both] 表示两个分支都有的提交, [dev] 表示只有在 dev 分支的提交,[master] 表示只在 master 分支的提交

    1. 查看dev有,而 master 分支没有的提交
    • 方法一

    命令:

    git log dev ^master

      结果:

      [alvin@VM_0_16_centos git-log]$ git log dev ^master
      commit b191410906ae20a865fde3f163bb01fd6cfc1f11
      Author: Liangxu <yychuyu@163.com>
      Date:   Sat Dec 8 21:03:13 2018 +0800
      
          [dev] 版本6
      
      commit 793c9582ab0a45c4f8f548be36c06bc5ca427c62
      Author: Liangxu <yychuyu@163.com>
      Date:   Sat Dec 8 21:02:30 2018 +0800
      
          [dev] 版本5
      
      commit 4872f653a8fd7c8541abb4a292d628dc7625884b
      Author: Liangxu <yychuyu@163.com>
      Date:   Sat Dec 8 20:58:05 2018 +0800
      
          [dev] 版本4
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      很明显看到,版本4,5,6这三个提交只在 dev 分支里。

      相反,如果想看到 master 分支有,而 dev 分支没有的提交,就可以使用如下命令:

      git log master ^dev

        结果:

        [alvin@VM_0_16_centos git-log]$ git log master ^dev
        commit c690054c67b833b22dce4120899526743b20d36d
        Author: Liangxu <yychuyu@163.com>
        Date:   Sun Dec 9 07:31:47 2018 +0800
        
            [master] 版本7
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 方法二

        使用如下命令:

        git log master..dev

          如果想查看只在 master 分支,而不在 dev 分支的提交,则将 master 与 dev 对调过来即可:

          git log dev..master

            这两条命令的执行结果与上述相同,故不重复贴结果了。

            2. 提前未知两个分支提交情况,如何查看两个分支的差异?

            在这种情况下,上述的几个命令都跑一遍,其实也可以知道个大概了。但有没有更简单的办法呢?git 同样为你想到了这个问题,也提供了解决办法:

            git log master...dev

              结果:

              [alvin@VM_0_16_centos git-log]$ git log master...dev
              commit c690054c67b833b22dce4120899526743b20d36d
              Author: Liangxu <yychuyu@163.com>
              Date:   Sun Dec 9 07:31:47 2018 +0800
              
                  [master] 版本7
              
              commit b191410906ae20a865fde3f163bb01fd6cfc1f11
              Author: Liangxu <yychuyu@163.com>
              Date:   Sat Dec 8 21:03:13 2018 +0800
              
                  [dev] 版本6
              
              commit 793c9582ab0a45c4f8f548be36c06bc5ca427c62
              Author: Liangxu <yychuyu@163.com>
              Date:   Sat Dec 8 21:02:30 2018 +0800
              
                  [dev] 版本5
              
              commit 4872f653a8fd7c8541abb4a292d628dc7625884b
              Author: Liangxu <yychuyu@163.com>
              Date:   Sat Dec 8 20:58:05 2018 +0800
              
                  [dev] 版本4
              
              • 1
              • 2
              • 3
              • 4
              • 5
              • 6
              • 7
              • 8
              • 9
              • 10
              • 11
              • 12
              • 13
              • 14
              • 15
              • 16
              • 17
              • 18
              • 19
              • 20
              • 21
              • 22
              • 23
              • 24

              请注意,在这里,master 与 dev 之间有三个点,有别于之前的命令(两个点)。而且,这个命令的执行结果与 git log dev...master 完全一样。

              我们这里是为了方便演示,加了 [master][dev][both] 这样的记号,但在实际开发过程中,很少会这样操作。那我们在执行 git log master...dev 时,怎么知道有差异的提交是在 master 分支里,还是 dev 分支里?我们只需加上 --left-right 选项即可。

              git log --left-right master...dev

                结果:

                [alvin@VM_0_16_centos git-log]$ git log --left-right master...dev
                commit < c690054c67b833b22dce4120899526743b20d36d
                Author: Liangxu <yychuyu@163.com>
                Date:   Sun Dec 9 07:31:47 2018 +0800
                
                    [master] 版本7
                
                commit > b191410906ae20a865fde3f163bb01fd6cfc1f11
                Author: Liangxu <yychuyu@163.com>
                Date:   Sat Dec 8 21:03:13 2018 +0800
                
                    [dev] 版本6
                
                commit > 793c9582ab0a45c4f8f548be36c06bc5ca427c62
                Author: Liangxu <yychuyu@163.com>
                Date:   Sat Dec 8 21:02:30 2018 +0800
                
                    [dev] 版本5
                
                commit > 4872f653a8fd7c8541abb4a292d628dc7625884b
                Author: Liangxu <yychuyu@163.com>
                Date:   Sat Dec 8 20:58:05 2018 +0800
                
                    [dev] 版本4
                
                • 1
                • 2
                • 3
                • 4
                • 5
                • 6
                • 7
                • 8
                • 9
                • 10
                • 11
                • 12
                • 13
                • 14
                • 15
                • 16
                • 17
                • 18
                • 19
                • 20
                • 21
                • 22
                • 23
                • 24

                我们会发现,在 commit 与哈希值之间多了个 <> ,其中 < 表示只在 master 分支的提交, > 表示只在 dev 分支的提交。

                最后,最近很多小伙伴找我要Linux学习路线图,于是我根据自己的经验,利用业余时间熬夜肝了一个月,整理了一份电子书。无论你是面试还是自我提升,相信都会对你有帮助!目录如下:

                免费送给大家,只求大家金指给我点个赞!

                电子书 | Linux开发学习路线图

                也希望有小伙伴能加入我,把这份电子书做得更完美!

                有收获?希望老铁们来个三连击,给更多的人看到这篇文章

                推荐阅读:

                声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/977061
                推荐阅读
                相关标签
                  

                闽ICP备14008679号