Git进阶 — 3、Git-后悔药-回退撤销-checkout
1. commit模式
注意 commit模式下git checkout,因为只切换HEAD位置,不会影响索引区与工作目录。所以请调用git status查看当前git三树状态。如果索引树或工作目录有修改,git是会终止操作。
1.1. 查看当前分支的HEAD信息
1 |
|
Your branch is up to date with ‘origin/checkTag’.
1.2. 切换HEAD到某个分支上
git checkout <branch_name>
操作HEAD切换到某个分支,HEAD默认是目标分支的最后一次提交快照
1.3. 新建一个分支,切换HEAD该分支上
git checkout -b <branch_name> [<remote_name/branch_name>]
- remote_name/branch_name (创建跟踪分支)
如果想拉取一个,在本地分支没有跟踪分支的远程分支,可以先执行git fetch然后再 git checkout -b
Switched to a new branch ‘iss53’
1.4. 切换HEAD到某个提交快照上
git checkout (<tree-ish>|<tag\_name>)
注意 1. 如果该目标的提交快照不是其所属的分支中最后一次提交,HEAD的状态是detached HEAD,git会建议你使用git checkout -b 在这个快照上新建一个分支。
git 头指针分离问题,请见Git进阶--8、git-头指针分离原因及解决办法
2. file模式
注意 file模式下git checkout,不会更改HEAD,但是会修改目标文件的索引树与工作目录,保持它们与HEAD一致
2.1. 切换某个文件到某个分支/提交快照上
git checkout (<branch\_name>|HEAD|<tree-ish>|<tag\_name>) \[--\] <file\_path>
还原git三树,与HEAD保持一致,返回到初次提交的状态,文件上原有修改会被丢弃
注意 前提是目标分支/提交快照是存在目标文件,否则git会拒绝执行
2.2. 强制撤销修改
git checkout [–] <file_path>
更改索引树与工作目录,强制回滚到最近一次提交的状态,文件上原有修改会被丢弃
git checkout . 与 git reset –hard效果大致相同,但是前者可以控制撤销某个文件夹(更改.为其它路径),后者不能。
2.3. 对commit历史的影响
命令 | log | reflog |
---|---|---|
git revert | 新增 | 可跟踪 |
git checkout | 无变化 | 无变化 |
git reset | 丢失 | 可跟踪 |
git restore | 无变化 | 无变化 |
git amend | 改变 | 改变 |
参考:
https://wikinote.gitbook.io/git-learning/git-ji-ben-ming-ling/ti-jiao-che-xiao-yu-la-qu/git-checkout