git reset、git checkout 和 git revert
一、git reset 和 git checkout
git reset [commit]
重置为[commit]所对应节点的提交(通过移动分支指针和HEAD指针实现),如果不指定[commit]则默认为HEAD
--soft 工作区和暂存区不变,重置仓库
--mixed 工作区不变,重置暂存区和仓库,此为默认选项
--hard 工作区、暂存区和仓库全部重置,修改完全丢失
git reset [commit] [file]
重置某个commit的指定文件到暂存区(指定了[file],不会移动分支指针和HEAD指针)
备注:如果不指定[commit]则默认为HEAD,如果参数都不指定则重置暂存区所有文件
git checkout [file]
重置暂存区的指定文件到工作区(file为 . 则表示所有文件)
git checkout [commit] [file]
重置某个commit的指定文件到暂存区和工作区
[commit]:可以为SHA-1值、HEAD,而HEAD~表示HEAD的父节点,HEAD~2表示HEAD的父节点的父节点,以此类推
二、git revert
git revert [commit]
用[commit]所对应节点的提交,创建一个新的反转的提交
三、git fetch 和 git pull
git fetch 仅更新origin\master分支,需要手动merge
git pull 更新origin\master分支和当前分支,相当于fetch+merge
四、其他常用命令
git pull --rebase
以变基形式merge远程代码,关于git rebase可参考:https://segmentfault.com/q/1010000000430041
git merge --no-ff develop
以非fast-farward形式merge代码
git log --graph --oneline --decorate --all
绘制ASCII图像并显示提交历史
git checkout -b [本地分支名] [远程名]/[分支名]
基于某个远程分支创建新分支