Git的分支管理(4)
创建与删除分支
指针HEAD总是指向当前分支,不管是master分支还是dev分支,当前切换的是哪个分支就指向哪个。
Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master
指向dev
的当前提交,所以合并速度非常快。
在Fast forward模式下,删除分支后,会丢掉分支信息的commit信息。准备合并dev
分支,请注意--no-ff
参数,表示禁用Fast forward,则会在master中保留分支dev的commit信息。
查看分支:
git branch
创建分支:
git branch <name>
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
删除分支:
git branch -d <name>
代码冲突的概念及解决
出现问题的条件,当满足以下四个条件时,master合并dev时会有代码冲突(代码行冲突):
- 当版本在C的位置创建新的分支dev。
- 分支dev经过一次或者多次提交。
- 分支master也经过一次或者多次提交。
- 分支master与dev对相同文件的相同位置(一般以行为单位)进行了修改。
导致的结果:
分支master相对于版本C没有做修改的地方,如果分支dev做了修改,则会合并dev的修改,包括添加或者删除文件。
如果master和dev都修改了相同文件的相同行,则会出现代码冲突。
解决办法:
需要修改存在代码冲突的文件,再次git add file,git commit,则会解决问题。此时应该删除分支dev,因为已经合并,没有利用价值。
保存现场
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
注意,经过实测
在 dev分支中做了文件修改,不做git stash现场保存的话,会把文件的修改状态包括暂存区状态带到master,并认为是在master的状态。
更多使用命令
git branch -D <name> :强行删除。分支经过多次修改没有合并,使用git branch -d命令会提示错误 。则
git remote -v :查看远程库信息显示更详细的信息。
git push origin branch-name :从本地推送分支使用,如果推送失败,先用
git pull
抓取远程的新提交;代码冲突的机制是一样的。git checkout -b branch-name origin/branch-name :在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致。
git branch --set-upstream branch-name origin/branch-name:建立本地分支和远程分支的关联,使用;
标签管理
什么是标签?
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本,标签是版本库的一个快照,它指向某个commit的指针,所以创建和删除标签都是瞬间完成的。
Git有commit ID,为什么还要引入tag?
commit ID不容易记忆,给它取一个别名,方便记忆和版本识别。
命令介绍
git tag <name> :切换到分支,使用此命令
就可以打一个新标签。git tag <name> <commit ID> :把之前的提交打上标签。
git tag -a <tagname> -m "msg" :
可以指定标签信息
git tag :
查看所有标签。
git push origin <tagname> :
可以推送一个本地标签。
git push origin --tags :
可以推送全部未推送过的本地标签;
git tag -d <tagname> :
可以删除一个本地标签;
git push origin :refs/tags/<tagname>
:可以删除一个远程标签。
文章参考廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000