0


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 // 将本地分支代码强制推送到远处分支

或者

git reset --soft HEAD^  

命令解释:

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 // 将本地分支代码强制推送到远处分支

补充:
使用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

三、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 // 推到远程分支上

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

补充:

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

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

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

git reset HEAD filename //放弃该文件的commit,回退到工作区
git reset HEAD // 放弃所有文件的commit,回退到工作区
标签: git github

本文转载自: https://blog.csdn.net/weixin_43957384/article/details/131394867
版权归原作者 xiaaaa.z 所有, 如有侵权,请联系我们删除。

“git撤回某次commit”的评论:

还没有评论