git学习4:分支管理

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,这个分支叫主分支,即master分支,HEAD指向mastermaster指向提交,因此,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也愈来愈长。python

当咱们建立新的分支dev时,git新建了一个指针叫dev,指向master相同的提交,同时把HEAD指向dev,就表示当前分支在dev上,不过,从如今开始,对工做区的修改和提交就是针对dev分支了,好比新提交一次后,dev指针往前移动一步,而master指针不变,假如咱们在dev上的工做完成了,就能够把dev合并到master上。最简单的合并方法,就是直接把master指向dev的当前提交,就完成了合并。合并完分支后,甚至能够删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,咱们就剩下了一条master分支git

 

首先,建立dev分支并切换到该分支,ruby

git checkout -b devspa

解释:-b表示建立并切换,线程

至关于两条命令:指针

git branch devcode

git checkout dev开发

能够用命令git branch查看当前分支,会列出全部分支,在当前分支前标一个*号。it

此时对readme.txt作修改,而后提交io

git add readme.txt

git commit -m 'branch test'

如今切换回到master分支

git checkout master

查看readme文件,发现刚才添加的内容不见了,这是由于那个提交是在dev分支上,而再也不当前的master分支上。

这时把dev分支的修改合并到master上

git merge dev

用于合并指定分支到当前分支上,

合并后,再查看readme文件,添加的内容出现了。

这时就能够删除dev分支了,

git branch -d dev

删除后,查看branch

git branch

只剩下master分支了。

 

冲突解决:

1,建立并切换dev分支

git checkout -v dev

修改readme文件,而后添加到暂存区,再提交新的commit。

2,切换回master,

git checkout master

修改readme文件,而后添加到暂存区,再提交新的commit。

master分支和dev分支各自都分别有新的提交,这种状况下,Git没法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,

 git merge dev

果真出现冲突信息,显示合并失败。

git status也能够告诉咱们冲突的文件,

咱们能够直接查看readme.txt的内容:

Git用<<<<<<<=======>>>>>>>标记出不一样分支的内容,咱们修改readme.txt后保存

而后添加到暂存区,再提交新的commit,,

合并后,用git log查看分支历史,

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

最后,删除dev分支:

git branch -d dev

 

通常分支进行合并时,git会采用Fast Forward模式,但这种模式有弊端,就是删除分支后,会丢掉分支信息。若是要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就能够看出分支信息。

建立并切换dev分支

git checkout -v dev

修改readme文件,而后添加到暂存区,再提交新的commit。

如今,咱们切换回master

git checkout master

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

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

合并后,咱们用git log看看分支历史:

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

分支管理原则:master分支应该是很是稳定的,即仅仅用来发布新版本。平时在dev分支上进行试验,时不时分之合并便可。

 

假设当前在dev分支上进行工做,可是须要立刻修复bug,如何处理呢?

因为dev的工做还未完成,因此不能提交,

1,使用git  stash命令,把当前的工做现场储存起来,等恢复现场以后继续工做。

git  stash

2,假设bug在master分支上,从master建立临时分支

git checkout master

git checkout -b  issue-101

3,修改bug,而后添加到暂存区,并提交

git add readme.txt

git commit -m 'fix bug 101'

4,切换到master分支,合并,删除issue-101分支。

git checkout master

git merge --no-ff -m 'merge bug fix101' issue-101

git branch -d issue-101

5,回到dev分支

git checkout dev

6,查看工做现场

git stash list

7,恢复工做线程

git stash pop

恢复的同时也把stash内容删除了

 

软件开发中,每添加一个功能,最好新建一个feature分支,完成后合并,最后删除该feature分支。

假如,开发代号为scan的新功能:

1,增长并切换到新分支上,

git checkout -b feature-sacan

2,开发完毕,增长到暂存区,并提交

git add scan.py

git commit -m 'develop new function'

3,切换到dev分支,

git checkout dev

4,合并和bug分支的合并相似,合并后删除。

或者因某些缘由,这个分支要删除

git branch -d feature-scan

可是,git提示,这个分支没有合并,要强行删除,须要使用命令、

git branch -D featuren-scan

相关文章
相关标签/搜索