Git学习 - Part4(分支管理)

Git学习 - Part4(分支管理)

一、创建和合并分支

  1. 分支概念
    每次提交,Git都会将他们串成一个时间线,这条时间线就是一个分支。
    截止到目前只有一个主分支叫master分支。
    HEAD指向mastermaster指向最新的提交。

    当创建新的分支,例如dev时,Git就新建了一个指针名为dev,指向master相同的提交,再把HEAD指向dev,表示当前分支在dev上。
    请添加图片描述

    之后对工作区的提交和修改都是针对dev分支了。
    请添加图片描述

    dev合并到master上,只需将master指向当前dev的提交即可。
    合并完成后甚至可以删除dev分支,即将dev指针删掉。

  2. 创建并切换分支
    例如创建dev分支,然后切换到上面。(dev均可直接替换其他名字,下同)
    git checkout -b dev
    -b表示创建并切换,相当于以下两条命令:
    git branch dev
    git checkout dev
    随后的修改即在dev分支上进行。

  3. 查看分支
    使用git branch命令列举所有分支并用*标注出当前分支:
    git branch

  4. 合并分支到当前分支
    切换到master分支
    git checkout master
    随后将dev分支合并到master分支上
    git merge dev
    此时Git提示为Fast-forward信息,表示此次合并为“快进模式”即直接进行指针的移动。

  5. 删除分支
    git branch -d dev删除dev分支

  6. git switch命令
    由于checkout命令具有迷惑性,因此使用switch更加科学。
    创建并切换到新的分支:git switch -c dev
    直接切换到已有分支:git switch master

二、分支冲突

  1. 产生如图冲突,masterfeature1各自更改了相同文件的内容然后各自提交
    请添加图片描述

  2. 合并冲突
    此时使用git merge feature1会提示冲突
    使用git status查看冲突的文件
    使用cat查看并修改冲突的文件具体内容,Git会自动用<<<<<<<=======>>>>>>>标记出不同分支的内容,手动将他们改为统一的内容。
    再将该文件提交即可。
    请添加图片描述

    用带参数的git log查看分支的合并情况:
    git log --graph --pretty=oneline --abbrev-commit
    最后删除feature1分支
    git branch -d feature1

三、分支管理策略

  1. --no-ff方式下的git merge
    通常合并分支时,没有冲突的话Git会使用Fast forward模式,在这种模式下,删除分支后会丢掉分支信息。
    使用--no-ff则会在合并时生成一个新的commit,从分支历史上就可以看出分支信息。与不加参数的区别在于可以看出曾经做过合并。
    详细命令为:git merge --no-ff -m "some descriptions" <name>
    因为合并要创建一个新的commit,所以需要使用-m将描述加进去。
    请添加图片描述

  2. 分支策略
    在实际开发中,我们应该按照几个基本原则进行分支管理:

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    请添加图片描述

四、bug分支

  1. 场景描述
    假设有一个紧急任务如处理bug需要立即进行,而当前在dev上所进行的工作还未完成只做了一半不想提交。
    因此可以使用stash功能,将当前工作现场储藏起来,等以后恢复现场之后继续工作:
    git stash

  2. 首先确定在哪个分支上修补bug,例如master
    git checkout master

  3. 创建临时分支
    git checkout -b issue-101

  4. 修补bug后提交
    git add readme.txt
    git commit -m "fix bug 101"

  5. 修补完成后,切换master分支并完成合并,最后删除issue-101分支
    git switch master
    git merge --no-ff -m "merged bug fix 101" issue-101
    git branch -d issue-101

  6. 显示工作现场
    git stash list

  7. 恢复工作现场

    1. git stash apply恢复工作现场

      git stash drop删除stash内容

    2. git stash drop直接恢复并删除stash内容

    3. git stash apply stash@{0} 恢复指定的stash内容

  8. 将bug修复到dev
    只复制修复bug的提交
    使用cherry-pick命令复制一个特定的提交到当前分支,其中commit id为提交修复bug的提交id:
    git cherry-pick <commit id>

五、Feature分支

  1. 场景描述
    添加一个新任务时,最好新建一个feature分支,在上面开发,完成后合并,最后删除该feature分支。

  2. 销毁分支
    此时接收到命令取消新功能但是包含机密的分支必须要销毁。
    使用普通git branch -d <branchname>命令无法删除分支,Git会提示分支还未合并,如果删除会丢失修改。
    因此使用 git branch -D <branchname>强行删除分支。

六、多人协作

  1. 查看远程库信息
    当从远程仓库克隆时,实际上是Git自动将本地的master分支和远程的master分支对应起来,并且远程仓库的默认名为origin
    git remote
    git remote -v可以显示更详细的信息

  2. 推送分支
    指定本地分支以及远程库:
    git push <远程库名> <分支名>

  3. 抓取分支
    git clone git@github.com:<用户名>/<远程库名>.git
    默认情况下只能看到本地的master分支
    现在要在dev分支上开发,就要创建origindev分支到本地:
    git checkout -b dev origin/dev
    现在就可以在dev上修改并将dev分支push到远程库

    如果git push时遇到冲突,先用git pull把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送:
    首先需要指定本地dev分支与远程origin/dev分支的链接(提示no tracking information):
    git branch --set-upstream-to=origin/dev dev
    再pull:
    git pull
    随后在本地解决冲突,随后提交并push。

七、Rebase

  1. git rebase

    rebase操作可以把本地未push的分叉提交历史整理成直线;

    rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值