git各阶段版本回退命令
- 工作区的代码改动不想要了(git add之前)
在git add之前 ,想要放弃刚刚做的修改,回到修改前的状态
可以使用如下命令:
git checkout -- main.cpp
由于还没有add以及commit,本地仓库的main.cpp仍然是修改前的main.cpp,只有工作区的main.cpp被改动了。这条命令的意思是,用本地仓库的main.cpp覆盖工作区的main.cpp
发现原来的注释也不见了
- git add以后放入暂存区的代码修改不想要了
已经提交到暂存区,我们现在需要放弃暂存区的修改
使用git reset HEAD的方式放弃暂存区的修改,
其中git reset HEAD表示放弃暂存区所有的修改,
git reset HEAD 文件名表示放弃暂存区某个文件的修改
此时工作区的文件还是处于被修改状态
可以通过git checkout – 文件名的方式放弃工作区的修改
- git commit提交到本地仓库的代码不想要了
git log查看提交日志
把HEAD指针指向原来的远程仓库上面,commi id为efd7e的状态,其实没有删除我们刚才的提交,这仅仅只是修改的HEAD指针的指向,然后就恢复了commit前的状态。文件main.cpp也复原了。
- 远程仓库的代码修改不想要了
github上也显示了完成
回退操作:
我们先修改本地分支的HEAD指针到未修改的状态
git push origin main 更新不了,一定是要本地仓库比远程的新
这时我们可以用-f强制推送到远程分支,用落后的分支覆盖远程的分支。注意,强制推送前要用git log查看是否有别人也提交了,如果别人提交了,自己再用落后分支覆盖远程分支,这就会影响别人的修改
总结
git checkout -- 在git add之前,把工作区的代码用版本库中的代码覆盖掉,注意命令中的--不能
去掉,否则成切换分支的命令了
git reset HEAD 把git add之后,暂存区的内容全部撤销
git reset --hard commitid 把提交到本地仓库中的代码改动进行回退
git reflog 查看HEAD指针的改动日志
git push -f 强制推送本地仓库代码到远程仓库
git diff HEAD -- 查看工作区file文件和仓库中该文件最新版本的代码有什么区别