Git之撤回与修改

有时候写了一堆东西,发现都不需要了,怎么撤回修改呢?
有大致分为以下3种情况:

  • git add之前
  • git add之后,git commit 之前
  • git commit之后

git add之前

//这2个命令都不会撤回新建的文件,新建的文件只能手动删除
git checkout --filename //放弃该文件的修改
git checkout . //放弃所有文件的修改

git add之后,git commit之前

git reset HEAD filename //放弃该文件的commit,回退到git add之前的状态
git reset HEAD // 放弃所有文件的commit,回退到git add之前的状态

git commit之后

//不删除工作区改动的代码,撤销commit,不撤销git add .
git reset --soft HEAD^ //回退到上一个版本
git reset --soft <commit id> //回退到某个版本,可以使用git log查看某个版本的<commit id>
 //不删除工作区改动的代码,撤销commit,撤销git add .
git reset --mixed HEAD^//回退到上一个版本
git reset --mixed <commit id> //回退到某个版本
//删除工作区的代码,撤销commit,撤销git add . 回到上一次commit的状态
git reset --hard HEAD^ //回退到上一个版本
git reset --hard <commit id>  //回退到某个版本

如果提交的代码审核不通过,需要再次修改提交。由于是修改同一个问题,我们可能不希望生成多个 commit 信息,会显得改动分散,看起来改动不完善,所以想要在本地已有的 commit 信息上再次提交改动,而不是在已有的 commit 上再新增一个 commit。

使用 git commit --amend 命令可以达到在现有最新 commit 上再次提交改动的效果。

在本地提交改动后,我们再次修改代码,执行 git add 命令添加改动,如果执行 git commit -m 命令,默认会创建新的空 commit 信息,填写相应的修改说明,提交之后,会新增一个 commit 信息;而执行 git commit --amend 命令会弹出当前最新 commit 的信息,我们可以修改这个信息,也可以不修改,提交之后,用 git log 命令查看,会看到没有增加新的 commit,原先 commit 的 hash 值也没有变,这一次的修改是跟之前的修改一起提交的。

查看 man git-commit 对 --amend 选项的关键说明如下:

--amend
Replace the tip of the current branch by creating a new commit. 即,--amend 选项创建一个新的 commit 来替换当前最新的 commit,如同当前最新的 commit 信息被修改了一样。

 
posted @   爱喝茶的安迪  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示