前言
在Git常用命令(上)中记录了一些添加提交文件的命令,而这篇将介绍一些关于版本回滚和分支管理的命令。
版本回退
当发现新提交的版本有问题或者需要查看之前版本时可以使用版本回退功能。
git reset --hard HEAD
其中HEAD可以用提交时的版本号代替,可以是当前版本之前和之后的版本。
这是一个危险操作,他会替换掉工作区、暂存区和本地库中的内容,工作区和暂存区的内容将无法找回,本地库中的内容可以通过
git reset --hard <版本号>
找回,版本号可以通过 git reflog 来查找。
使用 git reset –hard HEAD 回退后,在本地库中指针已经指向了对应的HEAD,需要把他同步到远程库。但是这时发现push到远程库失败, 原因是本地库比远程库的版本低(那是当然,刚才做了版本回退了啊),也不能执行pull,否则之前的操作就白费了。解决的办法是使用强制提交
git push -f origin master
除了用reset之外还可以使用revert进行回退
git revert <版本号>
reset与revert的区别在与reset 是把HEAD向后移动了一下,而revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
分支
在多人协作的开发中,需要有一个规范的工作流程。关于工作流程可以参考Git 工作流程,下面将介绍一些关于工作流程中分支的用法。
git branch <branchName>
创建分支
git checkout <branchName>
切换分支
git checkout -b <branchName>
创建并切换分支
git branch -d <branchName>
删除分支
git branch
查看全部分支,在当前分支前加上*
git merge <branchName>
将指定分支合并到当前分支
it merge --no-ff -m "提交信息" <branchName>
将指定分支合并到当前分支禁用 fast forward ,用这种方式提交会在当前分支生成一个合并分支的记录,方便之后的问题排查。
git rebase <branchName>
并入分支,这个和merge执行后的结果一致,但是实现的原理不同。merge只是合并分支,合并后当前分支的历史不变,只会新增目标分支的新的提交。而rebase则是先找到分支的起点,再将目标分支对应起点之后的各版本提交,然后提交当前分支对应起点的各版本。显然这会改变当前分支的历史,将不属于该分支的版本加入到当前分支中,会增加排查问题的难度。
并入过程中可能会多次遇到冲突,可以在解决冲突后使用
git add .
git rebase --continue
依次解决。
rebase 需要遵循原则,即绝不要在公共的分支上使用它。
git log --graph --pretty=oneline --abbrev-commit
查看分支合并情况
blame
git blame <fileName>
用来查询该文件的修改记录
标签
在每次发布版本或者新增重大功能时可以打上标签以方便以后的查询。
git tag <tagName>
创建标签
git tag -d <tagName>
删除标签
git push origin <tagName>
将标签推送到远程库