美文网首页
【转载】Git回滚命令记录

【转载】Git回滚命令记录

作者: 南瓜pump | 来源:发表于2022-04-28 11:13 被阅读0次

Git回滚命令记录

测试仓库,master分支只有3个commit,每个commit只是添加一个文件,因此一共有3个文件:01.txt, 02.txt, 03.txt。

git log
commit b39476b9c730d312266fe9bc7f63e795f9ba856f
Author: kiwenlau <kiwenlau@126.com>
Date:   Thu Jan 18 14:58:06 2018 +0800

    3个文件

commit 3821210392184432de18b596cee58ab7924e39f9
Author: kiwenlau <kiwenlau@126.com>
Date:   Thu Jan 18 14:57:38 2018 +0800

    2个文件

commit 55d3012564e94a39f6686c0e532c0459ddc41ec4
Author: kiwenlau <kiwenlau@126.com>
Date:   Thu Jan 18 14:56:41 2018 +0800

    1个文件

本文介绍的所有回滚代码的命令,都会在一个新的分支执行,方便大家理解:

示例 分支 说明 命令
1 test01 撤销最近1次commit git revert HEAD
2 test02 撤销某个commit git revert 3821210392184432de18b596cee58ab7924e39f9
3 test03 撤销多个连续commit git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9
4 test04 撤销多个非连续commit git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9
5 test05 重置为某个commit(不保存代码) git reset –hard 55d3012564e94a39f6686c0e532c0459ddc41ec4
6 test06 重置为某个commit(保存代码) git reset –soft 55d3012564e94a39f6686c0e532c0459ddc41ec4

git revert : 撤销特定commit

Git的每一个commit都对应着某些代码改动,那万一改错了呢?这时可以使用git reset来撤销某一次commit的改动。所谓撤销,就是把修改了的代码再改回来

示例1

最简单的一个场景,就是撤销最近的1次commit:

git revert HEAD

最近1次commit是新增03.txt,撤销这个commit之后,test01分支就只剩下2个文件了:01.txt, 02.txt。

示例2

有时,可能需要撤销某个特定commit,比如,当我需要撤销第2个commit时,指定对应ID即可:

git revert 3821210392184432de18b596cee58ab7924e39f9

最近1次commit是新增02.txt,撤销这个commit之后,test02分支就只剩下2个文件了:01.txt, 03.txt。

由这个示例可知,使用git revert撤销commit时,仅仅针对所撤销的commit,与任何其他commit无关

示例3

假设我们再做某个功能时,进行了多次commit,需要全部撤销。我们当然可以一个个commit依次revert,这样比较麻烦,其实可以一次性搞定:

git revert b39476b9c730d312266fe9bc7f63e795f9ba856f 3821210392184432de18b596cee58ab7924e39f9

撤销了后面2个commit,test03分支就只剩下1个文件了:01.txt。

示例4

示例3中所撤销的2个commit是连续的,其实,因为revert操作只与单个commit相关,我们也可以撤销多个非连续的commit:

git revert b39476b9c730d312266fe9bc7f63e795f9ba856f  55d3012564e94a39f6686c0e532c0459ddc41ec4

撤销了第1个和第3个commit,test04分支就只剩下1个文件了:02.txt。

git reset:重置为特定commit

示例5

在示例3中,撤销了两个连续的commit,这样做等价于将代码重置为第1个commit的状态:仅有01.txt这1个文件。使用git revert命令有些麻烦,我们可以直接使用git reset命令来实现:

git reset --hard 55d3012564e94a39f6686c0e532c0459ddc41ec4

将仓库强制重置为第1个commit,这样test05分支就只剩下1个文件了:01.txt。git reset –hardgit revert效果看起来一样,但是不同点在于,前者直接删除了后面2个commit及其代码,没有保存commi历史,因此这个操作是不可逆的!使用时应该特别小心。

如果你的本地仓库与远程仓库在reset之前是同步过的,reset之后,两者的commit不一致,本地仓库的commit落后与远程仓库,这样会导致push失败:

git push
To git@github.com:Fundebug/git-rollback.git
 ! [rejected]        test05 -> test05 (non-fast-forward)
error: failed to push some refs to 'git@github.com:Fundebug/git-rollback.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

这是需要使用–force选项,这样远程仓库会被强制覆盖:

git push --force

示例6

reset时使用–hard选项是一个很危险的操作,因为它把commit以及代码全删了,没法恢复。如果你只希望删除commit,而保留修改过的代码的话,可以使用–soft选项。

git reset --soft 55d3012564e94a39f6686c0e532c0459ddc41ec4

这时,后面2个commit也被删除了,当前commit为第1个commit。但是,02.txt与03.txt并没有被删除。

git status
On branch test06
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   02.txt
    new file:   03.txt

这就意味着,当你的commit的代码有一些小问题时,可以重置commit,修改一下代码,如何重新commit即可。

转载自腾讯云社区:Git如何回滚代码?,如有侵权请联系删除。

相关文章

  • 【转载】Git回滚命令记录

    Git回滚命令记录 测试仓库[https://github.com/Fundebug/git-rollback],...

  • git回退到某个版本

    方法一 git reset commit_id 这命令会丢掉回滚的提交记录 方法二 git revert comm...

  • git 代码回滚

    Git回滚代码到某个commit 回退命令:

  • Git 简明教程--日常操作

    初始化相关信息 常用操作 git 命令设置别名 回滚操作1 reset 回滚操作2 checkout 回滚操作...

  • git 后悔药之 undo git commit

    git commit 后,想把此次 commit 回滚, 使用: git add 前: 执行下面命令$ git a...

  • git回滚命令

    01:git log 查看提交历史。 02:git reflog 查看所有分支的所有操作记录。 03:git re...

  • GIT 常用命令随笔

    常用git 命令 git 代码回滚 先显示提交的log 回滚到指定的版本 强制提交 git 新建项目 git 修改...

  • git回滚和强制提交

    Git回滚代码到某个commit 回退命令:git reset --hard HEAD^ 回退到上个版本 git ...

  • git强制回滚版本

    Git回滚代码到某个commit回退命令: git reset --hard HEAD~3 回退到前...

  • git回滚--记录

    1、回滚到指定的commitIdgit reset --soft commitId此时编辑器有更改内容,可以进行取...

网友评论

      本文标题:【转载】Git回滚命令记录

      本文链接:https://www.haomeiwen.com/subject/qbaryrtx.html