恢复和重置涉及的命令:git log 、git reset、git revert、git reflog
git log
git log [<options>] [<revision range>] [[–] <path>…] 查看commit的提交记录
e.g :
git log 查看全部提交记录
git log -5查看前五次提交记录
git log -5 a.txt 查看涉及a.txt前五次的提交记录
git log -5 — a.txt 查看涉及a.txt前五次的提交记录
git reset
git reset –hard commitID(或者HEAD^)
git reset –soft commitID(或者HEAD^)
git reset –mixed commitID(或者HEAD^)
–hard –soft –mixed选项的区别:
–hard 会丢弃所有的改变并且清空工作区和缓存区,
–soft将commit到本地仓库的文件还原到工作区,但是缓存区中的内容不变,
–mixed将commit到本地仓库和缓存区中的内容都还原到工作区
e.g:
git reset –hard HEAD^ 丢弃最后一次的更改
git reset –hard HEAD^^ 丢弃最新两次的更改
git revert
git revert [<commit>](或者HEAD^)
e.g:
git revert HEAD^ 丢弃最后一次的更改
git revert HEAD^^ 只丢弃第二新的更改
reset和revert的区别
revert会建立一个新的commit,只恢复要恢复的commit
reset会丢弃你要重置之后的commit,等于重置到指定commit的版本
git reflog
可以查看已经删除的commitId
1、项目组要求拉取一个分支,这个分支是我们主版本的指定版本,假定我们的主版本的分支名字就叫git-test,新版本分支叫git-feature我先来把操作命令写下来
git log 列出提交目录 git checkout e9f771353f2aa215ce962b5beb64a0bfd4a161f2 切换到指定commitId git switch -c git-feature 以上一步的commitId为版本建立分支git-feature git push -u origin git-feature 推到远程仓库的新分支中,远程仓库的名字为origin,分支名为git-feature
git log

git checkout e9f771353f2aa215ce962b5beb64a0bfd4a161f2

git switch -c git-feature

git push -u origin git-feature

git status


完成!
2、项目成员小王误提交了idea的配置文件并且已经推送到远程仓库,之后小李和小张也提交了代码并且推送到了远程仓库。假定分支名为git-feature,我们来帮他回退,我先把命令写下来:
git log -5 查看前五条提交记录 git revert e9f771353f2aa215ce962b5beb64a0bfd4a161f2 回退小王的commitId
git push 把恢复的内容推到远程仓库
git log -5

git revert d7c99e8c9dea2f2b4cb289fe732e70b83bac486e

git push
git log -6

3、项目成员小王误提交了idea的配置文件并且已经推送到远程仓库,之后小李和小张也提交了代码并且推送到了远程仓库,小王和小张,小李沟通,发现他们的提交内容也有问题,想一起回退掉。假定分支名为git-feature,我们来帮他回退,我先把命令写下来:
git log -6
查看提交日志
git reset --hard e9f771353f2aa215ce962b5beb64a0bfd4a161f2 重置到指定版本(注意这个commitId是你想重置的commitId,一般是你提交的前一个commitId。而revert的commitId是你要恢复的commitId,
一般是你提交的commitId)
git log -5 查看提交日志
git log -6

git reset –hard e9f771353f2aa215ce962b5beb64a0bfd4a161f2

git log -5

三个人的commit全都删除了,分支分回到了小王提交的前一个版本。
ps: HEAD^ 最新的commitID HEAD^^ 第二新的commitID HEAD^^^ 第三新的commitID HEAD^^^… 一次类推