美文网首页程序员工具
Git学习笔记2-分支管理

Git学习笔记2-分支管理

作者: 春风十里_不如睡你 | 来源:发表于2017-10-14 15:35 被阅读0次

    一、原理

    在Git里,初始的分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。



    当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。



    从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。

    假如在dev上的工作完成了,就可以把dev合并到master上,就是直接把master指向dev的当前提交,就完成了合并。



    合并完分支后,甚至可以删除dev分支,删除dev分支就是把dev指针给删掉。

    二、相关命令

    • 创建分支
     git checkout -b dev
    
    • 查看当前分支
    git branch
    
    • 切换分支
    git checkout master
    
    • 合并分支
    git merge dev
    
    • 删除分支
    git branch -d dev
    

    三、解决冲突

    当两个分支各自都分别有新的提交,变成了这样,这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突。



    查看冲突的文件

    git status
    

    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们需要手动解决冲突,修改完成后再提交。

    git add file.java
    git commit -m "confilct fixed"
    

    现在,两个分支变成了下图所示。



    查看分支的合并情况

    git log --graph --pretty=oneline --abbrev-commit
    

    四、分支管理策略

    • 合并时创建一个commit
    git merge --no-ff -m "merge with no-ff" dev
    
    • 使用Fast forward模式和不使用Fast forward模式,merge后的对比



    • 分支策略

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    所以,团队合作的分支看起来就像这样:


    五、Bug分支

    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

    • 保存环境
    git stash
    
    • 查看已保存的环境
    git stash list
    
    • 恢复环境
    git stash pop
    

    六、Feature分支

    开发一个新feature,最好新建一个分支;
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

    • 强行删除分支
    git branch -D dev
    

    七、多人协作

    多人协作的工作模式通常是这样:
    首先,可以试图用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
    这就是多人协作的工作模式,一旦熟悉了,就非常简单

    • 查看远程库信息
    git remote -v
    
    • 推送分支
    git push origin branch-name
    
    • 拉取分支
    git pull
    
    • 在本地创建和远程分支对应的分支
    git checkout -b branch-name origin/branch-name
    
    • 建立本地分支和远程分支的关联
    git branch --set-upstream-to origin/branch-name branch-name
    

    八、标签管理

    • 创建标签

    命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
    git tag -a <tagname> -m "blablabla..."可以指定标签信息;
    git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
    命令git tag可以查看所有标签。

    • 操作标签

    命令git push origin <tagname>可以推送一个本地标签;
    命令git push origin --tags可以推送全部未推送过的本地标签;
    命令git tag -d <tagname>可以删除一个本地标签;
    命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

    相关文章

      网友评论

        本文标题:Git学习笔记2-分支管理

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