这篇笔记是廖雪峰的git教程的一篇总结笔记
git分支的基本处理
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 创建并切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
- c查看分支i合并图:
git log --graph
分支的几个个人理解:
首先,master是一个单个的开发线,这个线本身就是一个主分支。我们开发新的功能时,可以创建一个dev分支,最简单的方法是在master指针之前创建一个新的开发结点,并使得dev指针指向该结点,最后使得HEAD指针指向dev指向的结点即可。
之后合并分支的时候,只需要使master指针指向HEAD的提交即可,最后删除dev分支就行了。确保master指向dev分支后,执行git checkout -d dev
即可删除dev指针。
使用命令:
git log --graph --pretty=oneline --abbrev-commit
可以查看所有的分支以及合并的路线图。如果出现合并冲突,则必须人工解决。
git在合并分支的时候,会尽可能使用Fast-Forward方式,这个方式在合并的时候,会删除分支的信息。如果要保留分支的信息,那么需要使用git merge --no-ff
的命令。
实际开发中,不应在master分支中进行直接开发,master分支用于版本发布。应该新建一个dev分支,当测试完毕后,再往master分支上提交。如果多人合作开发,那么每个人都要有自己的分支,然后往dev分支上合并,之后dev再往master上合并,如下图所示:
bug分支
软件开发时,每个bug都可以创建一个临时的bug分支进行管理,当修复bug后,可以合并分支,然后删除原来的bug分支。有一个特殊的场景:我们在dev上进行开发工作,预计该工作需要1周的时间完成;但是此时有一个bug需要在一天内修复,但是我们不想立刻提交未开发完的dev分支。此时可以使用git stash
命令来保存工作现场,然后去修复bug。
为什么要使用git stash
:该命令是保存暂存区的数据,执行完成该命令后,暂存区的内容被临时保存,此时git status
可以看到暂存区没有任何内容。使用git stash
后,我们重新创建bug分支,此时修复bug一般都会使用到暂存区,那么此时的暂存区就是为了单纯修复bug而使用的。修复完毕后,使用commit
命令提交暂存区的数据到相应的分支即可。
bug修复完了,我们需要回复之前的开发内容,此时有两个可以选择的命令:
git stash apply
命令恢复,但是stash的内容不会删除,需要再次使用git stash drop
删除git stash pop
命令恢复暂存区,同时删除stash的内容
git stash
可以使用多次,之后使用git stash list
查看不同的stash,之后可以恢复制定的stash, 比如:git stash apply stash@{0}
feature分支
每当开发一个新的feature时,最好新建一个分支如果要强行删除一个没有合并的分支,需要使用命令:git branch -D <name>
多人合作开发
多人合作开发时,从远程克隆仓库,此时本地master分支和远程的master自动关联,而且远程仓库的默认名称是origin。使用命令git remote
查看远程仓库的基本信息,使用git remote -v
查看远程仓库的详细信息。
推送不同的分支:
- 推送主分支:
git push origin master
- 推送
dev
分支:git push origin dev
- bug分支一般不需要推送
- feature分支如果不需要合作开发,则没必要推送
抓取分支操作,一般来说,git clone
命令只是克隆了master分支,如果需要克隆dev
分支,则需要执行:
git checkout -b dev origin/dev
这条命令本地新建dev
分支,之后再同步远程的dev
分支。
如果远程的仓库在我们提交的时候,已经进行了更新,那么需要同步后再提交。分为2个情况:
- master分支,这个在
git clone
的时候,就已经自动关联了,只需要执行git pull
抓取同步即可。 dev
分支或者其它开发分支,先建立远程的关联,以dev
分支为例:- 建立关联操作:
git branch --set-upstream-to=origin/dev dev
- 拉取最新仓库:
git pull
- 建立关联操作:
Rebase操作
这一节的笔记整理自这篇博客,只是做一个总结。
git rebase master
把master
分支的历史提交整理成线性的。一般来说,如果我们不是维护者,但是想要对仓库做一点贡献,可以使用这个命令。注意,如果分支提交到了远程仓库,那么就不要对分支进行rebase
操作,否则会把提交过程搞得非常混乱!!