git 分支管理

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立即提交,由于代码还没写完,不完整的代码库会导制别人不能干活。如果等全部写无再一次提交,又存在丢失每天进进度的巨大风险。有了分支,就可以创建一个属于你自已的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活。

创建和合并分支

一开始的时候,master分支是一条经,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。

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

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

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

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

当Git无法自动合并会支时,就必须首先解决冲突。合并完成后,可以用git log --graph命令可以看到分支合并图。

分支策略

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

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

干活都在dev分支上,每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以。

合并分支时,另上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Bug分支

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提交。并不是你不想提交,而是工作只进行到一半,还没有办法提交,但是bug需要快速修复,怎么办?

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。现在,用git status查看工作区,就是干净的,因此可以放心创建分支来修复bug。

当完成bug修复后,可以恢复stash内容,有两种方法:

(1)用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

(2)git stash pop,恢复的同时把stash内容也删了。

你可以多冷饮stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

git stash apply stash@{0}

Feature分支

添加一个新功能时,肯定不希望因为一些实验性质的代码,把主分支搞乱,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

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

多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。要查看远程库的信息,用git remote, 或者,用git remote -v显示更详细的信息,如果没有推送权限,就看不到push的地址。

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,需要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其也分支,比如dev,就改成:

$ git push origin dev

但是,并不是一定要把本地分支远程推送,那么,哪些分支需要推送,哪些不需要呢?

(1)master分支是主分支,因此要时刻与远程同步。

(2)dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步

(3)bug分支只用于本地修复bug,就没必要推送到远程也,除非老板要看看你每周到底修复了几个bug

(4)feature分支是否推送到远程,取决于你是否和你的小伙伴合作在上面开发。

抓取分支

当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。可以用git branch命令看看。

现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地

$ git checkout -b dev origin/dev

因此,多人协作的工作模式通常是这样:

(1)首先,可以试图用git push origin branch-name推送自己的修改。

(2)如果推送失败,则因为远程分支比你的本地更新,需要git pull试图合并

(3)如果合并有冲突,则解决冲突,并在本地提交。

(4)没有冲突或者解决冲突后,再用git push origin branch-name推送就能成功。

如果git pull提示“no tracking information”则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name orgin/branch-name

 

 

最后欢迎大家访问我的个人网站:1024s​​​​​​​

 

 

 

 

 

阅读更多

扫码向博主提问

chs007chs

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java
  • linux
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页