Git:分支管理

Git:分支管理

Tags: Git


本文主要包含如下内容:

文章目录

  • Git:分支管理
    • 分支管理介绍
    • 创建与合并分支
    • 解决冲突
    • 分支管理策略
    • 零时 bug 处理
    • 多人协作 git pull

   参考博客
   参考博客


分支管理介绍


  HEAD 指向的就是当前分支,在只有一条时间线时,这个分支叫主分支,即 master 分支。所以,HEAD 指向 master,master指向提交。(HEAD(当前版本) -> master -> 最新的提交)

  Git:分支管理_第1张图片

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

  Git:分支管理_第2张图片

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

  Git:分支管理_第3张图片

  最后,我们可以把 master 指向 dev 的当前提交,就完成了合并:

  Git:分支管理_第4张图片

  合并完分支后,甚至可以删除 dev 分支。删除 dev 分支就是把 dev 指针给删掉,删掉后,我们就剩下了一条 master 分支。


创建与合并分支


    查看分支:git branch

    创建分支:git branch 

    切换分支:git checkout 

    创建+切换分支:git checkout -b 

    合并某分支到当前分支:git merge 

    删除分支:git branch -d 

  示例如下:

    git branch            // 查看当前分支
    git checkout -b dev   // 创建了一个分支,并且切换到 dev分支上
    git checkout master
    git merge dev         //分支合并
    git branch -d dev     //删除dev分支

解决冲突


  若出现冲突,必须手动解决冲突后再提交。 git status 可以告诉我们冲突的文件:

    git status

  当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突后,需要重新提交,再删除之前的分支即可。

  例如:新分支 featurel 下,修改 file1.txt 文件,然后切回 master 分支上,也进行修改同一个文件 file1.txt 同一行,然后提交!最后合并会发生冲突。

  使用 git log --graph 命令可以看到分支合并图

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

分支管理策略


  合并分支的两种模式:

  fast forward 模式,合并后,删除分支,分支信息将会丢掉。

    git merge dev 

  普通模式 合并时添加 参数: “–no-ff” ,合并(merge)时生成一个新的commit,这样分支历史上就可以看到分支信息。
  不使用 Fast forward 模式,merge 后就像这样:

    git merge --no-ff -m "merge with --no-ff" dev

  Git:分支管理_第5张图片

  Git:分支管理_第6张图片


零时 bug 处理


  修复 bug 时,我们会通过创建新的 bug 分支进行修复,然后合并,最后删除;

  当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug ,修复后,再 git stash pop ,回到工作现场。

    git stash
    git stash pop

多人协作 git pull


  在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  首先,可以试图用 git push origin 推送自己的修改;
  如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  如果合并有冲突,则解决冲突,并在本地提交;
  没有冲突或者解决掉冲突后,再用 git push origin 推送就能成功!
  如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to origin/

你可能感兴趣的:(Git)