熟练掌握git撤销命令
初始演示仓库
git init git add README.md && git commit -m "first commit" git add .gitignore && git commit -m "add ignore file" git add main.py && git commit -m "add main file" git log --pretty=oneline
下面演示的每个环节都需要基于初始的演示仓库来操作
如何查看某一个提交记录的详细内容 上文已介绍 这里不再赘述了
git checkout
git checkout 不带文件路径 对工作区安全
checkout对工作区是安全的 不会丢弃工作区所做的更改
在工作区中新增tests/test.py文件 并将该文件加入暂存区 git add tests/test.py 然后checkout到上一个提交 git checkout 1bf76dd2df0af778721ce3084f0204105a394cc5
HEAD 会直接指向 1bf76dd2df0af778721ce3084f0204105a394cc5 提交 进入分离 HEAD 状态 即不再指向分支引用
然后提取1bf76dd2df0af778721ce3084f0204105a394cc5提交的文件快照依次更新到暂存区和工作区 git checkout [branch] 执行过程与上面类似 区别在于HEAD会指向[branch]这个分支的引用
checkout 带有文件路径 对工作区不安全
git checkout fa7557c5c8f4c2ecd4a9ba3308fded322f015ff6 README.md
git reset
soft模式
git checkout master && cat .git/refs/heads/master git reset --soft 1b0f9054582d9390dfd3d47e1127d692638cd818 git status
将HEAD及其指向的分支引用指向1b0f9054582d9390dfd3d47e1127d692638cd818 提交 HEAD指向的分支引用不变 但分支引用变成了1b0f9054582d9390dfd3d47e1127d692638cd818 若 HEAD 原本处于分离 HEAD 状态,则只会更新 HEAD 本身 它不会再对暂存区以及工作区进行任何更改 暂存区和工作区依然保留着原来的 406caab89533dcd17edc86bc2037d9134f543e66 提交之后的文件快照与文件
mixed模式
会重置提交历史 还会更新暂存区 git checkout master && cat .git/refs/heads/master git reset --mixed 5c8d38b72eb64a55b57d85d448407337773758d5
1、重置提交历史跟soft模式相同 2、之后还会更新暂存区 将其填充为5c8d38b72eb64a55b57d85d448407337773758d5提交的文件快照 暂存区的原有内容将会丢失 3、不会对工作区进行任何更改 工作区依然保留着68260c826b73d08505765ef82d20b027592dfe88提交之后的文件