Tags: Git
本文主要包含如下内容:
HEAD 指向的就是当前分支,在只有一条时间线时,这个分支叫主分支,即 master 分支。所以,HEAD 指向 master,master指向提交。(HEAD(当前版本) -> master -> 最新的提交)
当我们创建新的分支,Git 新建了一个指针叫 dev,指向 master 相同的提交,再把 HEAD 指向 dev,就表示当前分支在 dev 上:
从现在开始,对工作区的修改和提交就是针对 dev 分支了,比如新提交一次后,dev指针往前移动一步,而 master 指针不变:
最后,我们可以把 master 指向 dev 的当前提交,就完成了合并:
合并完分支后,甚至可以删除 dev 分支。删除 dev 分支就是把 dev 指针给删掉,删掉后,我们就剩下了一条 master 分支。
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
示例如下:
git branch // 查看当前分支
git checkout -b dev // 创建了一个分支,并且切换到 dev分支上
git checkout master
git merge dev //分支合并
git branch -d dev //删除dev分支
若出现冲突,必须手动解决冲突后再提交。 git status 可以告诉我们冲突的文件:
git status
当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突后,需要重新提交,再删除之前的分支即可。
例如:新分支 featurel 下,修改 file1.txt 文件,然后切回 master 分支上,也进行修改同一个文件 file1.txt 同一行,然后提交!最后合并会发生冲突。
使用 git log --graph 命令可以看到分支合并图
git log --graph --pretty=oneline --abbrev-commit
合并分支的两种模式:
fast forward 模式,合并后,删除分支,分支信息将会丢掉。
git merge dev
普通模式 合并时添加 参数: “–no-ff” ,合并(merge)时生成一个新的commit,这样分支历史上就可以看到分支信息。
不使用 Fast forward 模式,merge 后就像这样:
git merge --no-ff -m "merge with --no-ff" dev
修复 bug 时,我们会通过创建新的 bug 分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug ,修复后,再 git stash pop ,回到工作现场。
git stash
git stash pop
在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
首先,可以试图用 git push origin
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用 git push origin
推送就能成功!
如果 git pull 提示 no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to
origin/
。