linux-git-04 git分支管理
- 问题:假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
- 分支的作用:创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
我们依然用本地仓库:firstgit来演示,首先看看里面的已有文件内容
1 | [root@localhost firstgit]# ls |
快速合并
1 | 创建分支“dev”,合并分支 |
在上面这个例子中,主分支没有修改1.txt,只有dev分支修改了1.txt,那么主分支与dev分支合并的时候就不会产生冲突。与其说是合并,倒不如理解成没有主见的主分支采取了dev分支的意见,可以完成快速合并。
那么,如果除了dev分支,还有主分支对1.txt也进行了修改,导致二者之间各抒己见,就会产生冲突,这时候就没有办法快速合并了,你得手动解决二者之间的冲突之后,才能完成合并,下面我们新建一个test分支来测试一下如何进行冲突合并。
冲突合并
1 | [root@localhost firstgit]# git checkout -b test |
Bug分支
环境:当我们正在dev开发新功能的时候,突然有个紧急bug111需要修复,这是我们就需要将当前dev分支通过git stash命令打快照,然后假设去修改master分支上的bug,然后就需要先切换到master分支,然后再创建并切换到issue-111分支,进行修复,修复后将issue-111分支合并到master分支即可。
1 | 在test分支,修改1.txt文件,然后stash将现场快照 |
多人协作
- 查看远程库信息,使用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;
- 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
rebase作用
- rebase操作可以把本地未push的分叉提交历史整理成直线
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
标签管理
创建标签
- 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- 命令git tag -a -m “blablabla…”可以指定标签信息;
- 命令git tag可以查看所有标签。
管理标签
- 命令git push origin 可以推送一个本地标签;
- 命令git push origin –tags可以推送全部未推送过的本地标签;
- 命令git tag -d 可以删除一个本地标签;
- 命令git push origin :refs/tags/可以删除一个远程标签。