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命令

    推荐《Pro Git中文|Pro Git英文》 每天都在使用 Git ,但是很多命令记不住。一般来说,日常使用只要...

  • Git日常使用

    一、分支的用法 查看当前分支:git branch 创建分支:git checkout -b dev 当前分支前会...

  • Git日常使用

    仓库配置-用户名和邮件 作用:在提交日志中显示提交者的用户名和邮件。 全局配置(所有git本地仓库如果没有单独的配...

  • Git日常使用

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

  • git 日常使用

    创建代码库 cd到某个目录,然后创建一个Git本地代码库 $ git init cd到某个目录,将其初始化为带名字...

  • git 日常使用

    根据git 的日常使用频率,总结了一下 1、克隆工程 git clone https://github.com/X...

  • git日常使用

    删除没有add的文件git checkout head .https://segmentfault.com/q/1...

  • Git日常使用

    Git概念介绍 Git描述 Git是一个开源的分布式版本控制系统,分布式的含义是(它不需要服务器端软件的支持)。另...

  • git日常使用

    一、从SVN迁出到本地Git仓库(还没有配置Git仓库的,直接看第八条) gitsvn clone" " ...

  • git 日常使用

    git 日常使用 ==查看隐藏文件 -ah== 初始化本地仓库 添加文件到git 提交 查看当前仓库的状态 查看修...

网友评论

    本文标题:Git日常使用

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