git分支

分支是一个指向提交点的指针
head是指向当前的分支的,head指针指向了谁就代表哪个分支是当前分支
查看提交了多少版本

git logs #当前分支所指向的提交点(包括指向的提交点)之后的提交点并且在一条提交线上的详细信息
git log --pretty=oneline#只看到commit id和描述

什么是一条线呢?
举个例子,A分支指向了一个提交点1,然后创建了B分支并切换到B分支,这时A和B分支都指向同一提交点1,修改工作区文件后 ,再进行提交,这时产生了一个新提交点2,B分支也指向了这个提交点2。在B分支上可以使用git log 发现提交点1和提交点2。这两个提交点就是在一条线上的。一条线上可以使用快速合并模式。
这时,我们回到A分支git checkout A ,使用git log,只能看到提交点1,因为提交点2在A分支所指向的提交点的前面。这时,再commit一次,A分支指向了提交点3,我们使用git log 查看提交点3和提交点1是一条线的。再回到时B分支,看不到提交点3,因为不在一条线上。不同线之前的合并,就会产生冲突。

回退到上一个版本,把分支往后移一位提交点或者指定提交点

git reset --hard [HEAD^|commit_id]

查看命令历史中的commit_id,以便未来要回到哪个版本

git reflog

二、分支合并(快速合并)
分支就是一个指向提交点的一个指针,head指针指向的是分支。
//先创建一个分支,也就是先提交一次,产生master分支先
创建dev分支(新创建的分支默认和当前所在的分支指向同一提交点),然后切换到dev分支

git checkout -b dev
#相当于以下两条命令
git branch dev
git checkout dev

查看当前分支状态

git branch

在dev分支上提交

git commit -m "dev branch test"

回到master分支上,此时head指向了master,这时你发现你的工作区中的文件没有提交

 git checkout master

把master合并到dev,也就是把master指针指向了dev所指向的提交点,这个就叫快速合并,此时两个分支指向的都是同一个提交点。

git merge dev

或者执行以下这句,上面是Fast forward模式(改变分支所指向的提交,前提是要在一条线上),不会产生新的提交,这句话会产生新的提交。

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

删除掉dev

git branch -d dev

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch

切换分支:git checkout

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

合并某分支到当前分支:git merge | git merge –no-ff -m “merge with no-ff” dev

删除分支:git branch -d
三、解决冲突
上面的合并其实是在一条线上的,dev指向的提交点比master前,所以没有冲突。但是,如果两个分支不在一条线上。此时如果合并且文本内容不一样就会产生冲突。需要手动解决冲突(两个分支所指向的提交点的文件异同,你当前的提交点文件会被改变)后再提交。此时提交产生的提交点位于两条线上最前端。

git merge name

这里写图片描述
用git status可以查看冲突文件
四、普通合并
当前分支和dev分支进行合并--no-ff 代表使用普通合并,则会产生新的提交点

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

四、bug分支
有个场景你在dev分支上进行开发,些时线上有bug要进行修改,你需要到master分支上进行修改bug,可是你的任务没有完成,你不想提交。此时工作区己经被修改了。这时如果切换到了master分支上,你的工作区文件并不是master分支上所对应的文件。文件都不是master上的文件还改毛bug改啊。
这时就可以使用git stash ,再用git status 查看后,发现你的工作区是干净的。
再回到git checkout master,新建一个bug分支git checkout -b issue-101,bug修改完后commit,再回到master上进行合并,最后删除掉bug分支git branch -d issue-101
好了bug解决了我们继续回到dev分支上干活了。

git checkout dev
git stash pop #恢复在dev分支上的git stash工作区

五、分支强制删除
一般来说开发一个新功能,要建立一个新的分支,开发完成后进行提交合并。

git checkout -b feature-v1
git add -A
git commit -m 'add v1'
git checkout dev
//准备合并
# git merge feature-v1

但功能由于某些原因要取消

git branch -d feature-v1#这个删不掉
git branch -D feature-v1#强力删除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章