0
点赞
收藏
分享

微信扫一扫

git各阶段代码修改回退撤销操作


文章目录

  • ​​一、还没有add/commit,放弃工作区的修改​​
  • ​​二、已经add,还未commit,放弃暂存区的修改​​
  • ​​二、add/commit都已完成,放弃本地仓库的修改​​
  • ​​四、add/commit/push都已完成,放弃远程仓库的修改​​
  • ​​五、总结​​

git各阶段代码修改回退撤销操作_暂存区

一、还没有add/commit,放弃工作区的修改

ubuntu客户端查看工作区状态,没有需要提交的文件

git各阶段代码修改回退撤销操作_工作区_02

修改main.cpp

git各阶段代码修改回退撤销操作_工作区_03


git status查看工作区状态,提示工作区的main.cpp有修改

git各阶段代码修改回退撤销操作_github_04

在git add之前我们发现有错误,想要放弃刚刚做的修改,回到修改前的状态

我们可以使用如下命令:

git

由于还没有add以及commit,本地仓库的main.cpp仍然是修改前的main.cpp,只有工作区的main.cpp被改动了。这条命令的意思是,用本地仓库的main.cpp覆盖工作区的main.cpp

git各阶段代码修改回退撤销操作_工作区_05

只在工作区进行了修改,还没有进行add/commit,可以使用git checkout -- 文件名的方式放弃修改

二、已经add,还未commit,放弃暂存区的修改

修改main.cpp并add到暂存区

git各阶段代码修改回退撤销操作_暂存区_06

git各阶段代码修改回退撤销操作_github_07


已经提交到暂存区,我们现在需要放弃暂存区的修改

git各阶段代码修改回退撤销操作_git_08


当已经add但是还未commit时,我们可以使用​​git reset HEAD​​​的方式放弃暂存区的修改,其中​​git reset HEAD​​​表示放弃暂存区所有的修改,​​git reset HEAD 文件名​​表示放弃暂存区某个文件的修改

此时工作区的文件还是处于被修改状态,可以通过git checkout -- 文件名的方式放弃工作区的修改

二、add/commit都已完成,放弃本地仓库的修改

将错误代码从工作区add到暂存区,然后commit到本地仓库

git各阶段代码修改回退撤销操作_github_09


git log查看提交日志

git各阶段代码修改回退撤销操作_github_10

可以看到本地仓库的提交已经领先于远程仓库

git各阶段代码修改回退撤销操作_github_11

其实没有删除我们刚才的提交,这仅仅只是修改的HEAD指针的指向,并且将工作区、暂存区的状态一并统一到了commi id为cf9c的状态。我们依然可以通过​​git reset --hard 提交的ID​​的方式改变HEAD指针的指向,恢复到任意的commit状态

四、add/commit/push都已完成,放弃远程仓库的修改

git各阶段代码修改回退撤销操作_暂存区_12

我们先修改本地分支的HEAD指针到未修改的状态

git各阶段代码修改回退撤销操作_工作区_13


我们希望用本地落后的分支覆盖远程领先的分支,push试试

git各阶段代码修改回退撤销操作_暂存区_14


我们发现更新不了,一定是要本地仓库比远程的新

这时我们可以用​​-f​​强制推送到远程分支,用落后的分支覆盖远程的分支。注意,强制推送前要用git log查看是否有别人也提交了,如果别人提交了,自己再用落后分支覆盖远程分支,这就会影响别人的修改

git各阶段代码修改回退撤销操作_git_15


我们先回退本地仓库的HEAD指针,然后​​-f​​强制推送,让本地落后的版本覆盖远程领先的版本

五、总结

git各阶段代码修改回退撤销操作_github_16

  • git checkout - - 在git add之前,把工作区的代码用版本库中的代码覆盖掉,注意命令中的–不能去掉,否则成切换分支的命令了
  • git reset HEAD 把git add之后,暂存区的内容全部撤销
  • git reset --hard commitid 把提交到本地仓库中的代码改动进行回退
  • git reflog 查看HEAD指针的改动日志
  • git push -f 强制推送本地仓库代码到远程仓库
  • git diff HEAD – 查看工作区file文件和仓库中该文件最新版本的代码有什么区别


举报

相关推荐

0 条评论