Git日常使用

作者: 艾江山 | 来源:发表于2018-09-13 17:27 被阅读43次

    前言

    本次文章主要介绍git多人合作的时候如何使用分支开发,操作以sourcetree和终端结合使用。

    创建分支
    比如master分支上有ABCD四个commit我们要在D这里开一个新的分支出来修改bug。

         master :A---B---C---D      
           
                          1---2---3      fixbug
                        /
          a---b---c----d              master
    

    这个时候我们分配一个人修改bug,然后另一个人开发新功能,开了一个分支newfunction

                          f1---f2---f3      new function
                        /
          a---b---c----d                     master
    

    现在假设我们的bug改完了,我们这个时候应该把bugfix这个分支合并到主分支上,这时候我们应该先把多个commit合并为一个,让主分支保持简洁。

    • 现在的状态 image.png
    • 我们要切换到fixbug分支上,然后点击终端sourcetree会自动给你切换到这个分支上
    • 首先我们rebase下主分支(因为我没找到在sourcetree上怎么做rebase操作,只有在终端进行rebase 的操作)
    • 第一步跟新分支起点,因为可能在我们修改fixbug期间master分支可能已经有跟新rebase master
    • 第二步合并fixbug上的多个commit
      • 打印log git log --oneline(后面的--oneline是为了让log看的更清晰,不用打印作者之类的详细信息)

        image.png
        我们要合f1、f2、f3需要在f1前面一个commit 的id
      • 执行合并命令git rebase -i b44bc23

        image.png 注意红色方块,给你解释这些字母是谁的缩写,以及作用,我们这里会用到 s把f2,f3两个commit压缩到f1里面
      • 把f2,f3的pick改为s然后保存退出(wq)

        image.png 然后跟着提示,修改commit的信息
      • 这个时候我们回到sourcetree看下状态

        image.png 我们有三个拉取和一个推送。【切记】这个时候千万不要拉取远端,因为我们刚才rebase操作的只是本地的节点,所以远端分支上还是有3个commit.这时候我们应该直接推送,但是因为远端有拉取,直接推送不会成功,我们需要切换到终端,进行强推push -f(这个操作一定报确认本地代码无误,在主分支上一般会设置受保护,不允许push -f)
      • 完成push -f再查看状态只有一个commit了 image.png 然后在切换到master上合并fixbug这个分支。 image.png 合并完成后fixbug分支已经没有用了,直接删除本地和远端的。
    • 解释下我们刚才为什么要rebase 主分支,和为什么要把多个commit合并为一个
      • 首先是rebase 主分支。假设master分支是我们线上App Store的版本,然后我们要开发一个新的朋友圈功能,但是朋友圈功能不是一两天就开发完成的。在我们开发这个新功能的时候我们线上的版本可能会遇到紧急的bug(比如崩溃)这时候我们就要先在master上修改并且上传,这导致了我们朋友圈分支的代码并没有修改刚才的崩溃bug。这时候我们要做的就是把朋友圈分支的起点更新,就用到了我们的rebase master这个命令(后面的master是分支名字,也可以rebase到其他分支上)
      • 为什么要合并多个commit:这是为了主分支的整洁,比如朋友圈分支,开发完后我们很多commit可能只是为了整理代码,而且我们最后只关心的是你把这个功能做完了,以面向对象的思想,而不是面向过程的保留所有的commit。
        ps:前端时间同事,修改一个功能修改了大量代码,很久以后发现一个以前没有的bug(这时候已经修改了很多其他东西)我们开始追溯commit,好在他把改动的commit都合并成了一个,发现在他commit之前的代码就是ok的,这也反应了清晰的主分支也方便我们以后查找因为改动带来的bug
    • 附加一个回退版本,有时候我们想把代码回退到某一个节点 image.png image.png 这三个最后一个直接把代码丢掉,所以慎重选择, image.png 我选的第二个他会把回退的代码放到待提交区域,这时候因为操作的还是本地git,所以远端还是会有可拉取,但是千万不要拉取我们还是push -f强推上去

    各位大神有什么其他常用的git命令也分享分享,一起学习进步。
    喜欢动画的朋友可以关注我的GitHub https://github.com/aizexin/AIAnimationDemo

    相关文章

      网友评论

        本文标题:Git日常使用

        本文链接:https://www.haomeiwen.com/subject/idclgftx.html