Git可以在时间轴上穿梭,也可以在平行宇宙间穿梭,那么究竟是什么在穿梭呢?是HEAD指针。
有两种指针,一个是HEAD指针,另一种是分支指针。
分支指针指向其平行宇宙里(也就是这个分支里)的当前版本,而HEAD指针指向当前分支指针。
切换当前分支其实是把HEAD指针指向另一个分支指针。
合并分支就是把一个分支指针同步到另一个分支指针的位置。
删除分支就是删除分支指针。
而在诸多分支中master分支是主分支,是不能删除的,它指向提交。
查看全部分支:
git branch
新建分支:
git branch <name>
删除分支:
git branch -d <name>
切换分支:
git switch <name>
合并某分支到当前分支:
git merge <merged_branch>
冲突解决:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
BUG分支:
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
多人协作:
查看远程库信息,使用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
,如果有冲突,要先处理冲突。