git reset, revert, checkout
Git Reset
git reset [
将current branch head(HEAD) 指向
1 | --soft 修改 HEAD, Index 和 Working tree 不变 |
- reset 回退之后后悔了怎么办? 使用git reflog 查看reset 操作之前所在commit的id,使用reset –hard
即可撤销reset操作。
1 | HEAD (refers to branch 'master') |
Git Revert
撤销一次提交的修改,并创建一个新的提交来记录
- revert 是撤销一次提交,所以后面的commit id是你要撤销的commitID 不是撤销到该commit,比如Git revet HEAD 撤销最近的提交,Git reset HEAD 没有变化。
- 使用revert HEAD是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的
- 使用revert HEAD~1 表示撤销最近第二2次提交,这个数字是从0开始的,如果你之前撤销过产生了commi id,那么也会计算在内的。
1 | HEAD (refers to branch 'master') |
Git Checkout
git checkout
更新 Working tree 和 Index 或者 special tree 一致
git checkout
切换分支 更新 HEAD Index, working tree, working tree 中的修改不变,可以提交到另一个分支。
提取某个提交中的某个文件:
git checkout
1 | HEAD (refers to branch 'master') |
术语
Reference
分支指向的commit 目录 .git/refs/heads 下的文件记录了分支指向的commi.
1 | ➜ git:(dev) ✗ cat .git/refs/heads/master |
HEAD
当前活跃分支的游标,你再哪里HEAD 就在哪里,HEAD 默认指向当前分支的最后一次提交,也通过checkout 命令可以指向一个commit。git reflog 显示的就是HEAD的历史。HEAD 的本质是一个指向reference 的指针
1 | ➜ git:(dev) ✗ cat .git/HEAD |
Index
也称为staging aera(暂存区) 是即将被下一次提交的文件集合。
Working copy
当前工作和子目录中的文件集合