假设我们已经将本地代码提交到远程分分支上,但是我们想撤回某一个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 命令只能回滚某次的提交,无法满足保留最后一次提交只回滚之前的某次提交。
- 回滚代码
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编辑模式,修改完保存即可
- 撤回回滚
假设我们整错了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 .之前】文章来源:https://www.toymoban.com/news/detail-517678.html
//这2个命令都不会撤回新建的文件,新建的文件只能手动删除
git checkout -- filepath //放弃该相对路径下的文件的修改
git checkout . //放弃所有文件的修改
在暂存区撤回某个文件 【也就是在git add之后,git commit之前】文章来源地址https://www.toymoban.com/news/detail-517678.html
git reset HEAD filename //放弃该文件的commit,回退到工作区
git reset HEAD // 放弃所有文件的commit,回退到工作区
到了这里,关于git撤回某次commit的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!