Git与Github使用教程(七)--管理策略

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
过程如下:

#创建新分支dev
$ git checkout -b dev
Switched to a new branch 'dev'
#修改其中一个文件,并提交一个新的commit:、
git add <name>
git commit -m "commit"
#切换回master:
git checkout master
#准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
git merge --no-ff -m "merge with no-ff" dev
#查看历史纪录
git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
分支合并.png

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


git-br-policy
git-br-policy

bug分支

出现bug,需要立刻修复。
目前正在dev分支分支上开发,尚未add和commit,修复bug时需要保留dev上内容

  1. git stash把前工作现场“储藏”起来,等以后恢复现场后继续工作
  2. git status查看工作区,就是干净的
  3. 创建bug分支
  4. 修复bug并提交
  5. 切换到master分支
  6. 完成合并
    git merge --no-ff -m "merged bug fix 101" issue-101
  7. 返回到dev分支
    此时检查状态git status工作区是干净的,git stash是针对工作区(working directory)来说的,对缓存区无效。
  8. git stash list查看stash里的内容
    工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
    另一种方式是用git stash pop,恢复的同时把stash内容也删了:
    当多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
    $ git stash apply stash@{0}

feature分支

每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
开发完成后:
git branch -d feature-vulcan用于删除合并后的分支
git branch -D feature-vulcan强制删除分支

远程库管理

git remote查看远程库信息
git remote -v显示更详细的信息
推送分支:
git push origin master推送主分支
推送其他分支,比如dev,就改成:
$ git push origin dev
从远程库clone时,默认情况下,只能看到本地的master分支。
要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev

git fetch [remote-name] //抓取远程仓库的全部内容,但是不会自动合并  
git pull //抓取远程仓库跟踪分支的内容,并自动合并到本地相应的分支

你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

$ git branch --set-upstream dev origin/dev
Branch dev set up to track remote branch dev from origin.

git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push

多人协作的工作模式通常是这样:
首先,可以试图用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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 14,338评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 14,653评论 9 163
  • 我们都长大了。这便是青春的结局。 一路走来,我们终于不再年少。能证明我们曾经年少的就是那些陪我...
    流浪Alice阅读 949评论 0 0
  • 我在简书过鸡年,一路走来,谢谢简书年终岁首的陪伴,谢谢亲人的支持理解,愿一切如今天一样――立春。一年之计在于春。谢...
    唐金秀阅读 3,196评论 2 4
  • 温西的河流 。田秀 温西 那些河流 是沿河而生的柳条引领 恰如一...
    兴安居士阅读 2,750评论 0 2