当前位置:   article > 正文

git撤回某次commit_git撤销commit

git撤销commit

假设我们已经将本地代码提交到远程分分支上,但是我们想撤回某一个commit或者是对某一个文件的修改进行撤回等操作,我们可以使用以下这几种方式

一、git reset

git reset :回滚到某次提交。
git reset --mixed:此次提交之后的修改会被退回到工作区。不删除工作区改动的代码,撤销commit,撤销git add .【暂存区】
git reset --soft:此次提交之后的修改会被退回到暂存区。不删除工作空间的改动代码 ,撤销commit,不撤销git add . 【用于只想删除该提交本身而不影响其他更改】
git reset --hard:此次提交之后的更改都会被删除,git status 查看工作区是没有记录的(删除工作空间的改动代码,撤销commit且撤销add)

reset命令会更改 Git 存储库的历史记录,这意味着您的提交历史记录将会被修改
reset 命令只能回滚某次的提交,无法满足保留最后一次提交只回滚之前的某次提交。

  1. 回滚代码
git log // 查看所有commit的信息
git reset --hard commit_id // 回滚到指定提交
git push origin HEAD --force // 将本地分支代码强制推送到远处分支
  • 1
  • 2
  • 3

或者

git reset --soft HEAD^  
  • 1

命令解释:

HEAD^ 表示上一个版本,即上一次的commit,几个^ 代表几次提交,如果回滚两次就是HEAD^^。
也可以写成HEAD~ 1,如果进行两次的commit,想要都撤回,可以使用HEAD~2。
tips:
假设我们有些时候commit的备注写错了,我们可以运行
git commit --amend 进入vim编辑模式,修改完保存即可

  1. 撤回回滚
    假设我们整错了commit_id或者误删了某次commit
git reflog //显示可引用的历史版本记录. 找到要撤回的commit的前面的
git reset --hard commit_id // 恢复到这次修改
git push origin HEAD --force // 将本地分支代码强制推送到远处分支
  • 1
  • 2
  • 3

补充:
使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作,则可能会出现,HEAD指针之后仍存在历史提交版本的情况,而这些提交版本信息通过git log命令是看不到的。

二、git revert

git revert:放弃某次提交。之前的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。
git revert -m:用于对 merge 节点的操作,-m 指定具体某个提交点。
1)撤销提交

要撤销中间某次提交时,使用 git revert 也是一个很好的选择:

git log
git revert commit_id // 这时候代码会发生冲突 解决冲突 重新提交即可 相当于一次新的commit
git push
  • 1
  • 2
  • 3

三、git rebase

git rebase:您想彻底删除 Git 中的某次提交的内容,可以使用 git rebase 命令并将该提交删除。

也不会在git log中保留, 可以撤销中间某次提交
1)撤销提交

git log
git rebase -i commit_id // 进入vim编辑模式,把要删除的commit的前面的pick改为drop 
git push origin HEAD --force // 推到远程分支上
  • 1
  • 2
  • 3

使用 git reset 命令可以将当前分支的 HEAD 指针移到任意提交,从而使您能够删除 Git 存储库中的提交。
使用 git revert 命令可以撤销指定提交的更改,并创建一个新的提交来保留已撤销的更改的历史记录。
使用 git rebase 命令来删除提交可以永久删除提交并更改 Git 历史记录。

补充:

在工作区撤回某个文件 【也就是在git add .之前】

//这2个命令都不会撤回新建的文件,新建的文件只能手动删除
git checkout -- filepath //放弃该相对路径下的文件的修改
git checkout . //放弃所有文件的修改
  • 1
  • 2
  • 3

在暂存区撤回某个文件 【也就是在git add之后,git commit之前】

git reset HEAD filename //放弃该文件的commit,回退到工作区
git reset HEAD // 放弃所有文件的commit,回退到工作区
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/381607
推荐阅读
相关标签
  

闽ICP备14008679号