git回滚

本地修改未commit回滚

  • rollback变更文件
  • 暂存区取消也是可以的
  • delete删除文件

本地commit未push

1、放弃所有未跟踪和未暂存的更改:

1
2
3
git checkout . # 放弃所有未暂存的更改

git add . # 添加所有文件到暂存区

2、放弃所有更改(包括暂存区的更改):

1
git reset --hard HEAD~1

这个命令会放弃所有未提交的更改,将你的工作目录和暂存区重置到上次提交的状态。

3、放弃特定文件的更改: 如果你只想要放弃特定文件的更改,可以使用以下命令:

1
2
复制
git checkout -- <file>

file 替换为你想要放弃更改的文件名。这个命令会放弃该文件的未暂存更改。

本地已经commit,但是还未push

undo commit回滚最新/最后的commi
在vscode中,可以在git-COMMITS,看到最新的commit,点击向左箭头就可以取消提交。

drop commit回滚任意一次commit,不留任何痕迹
revert commit回滚任意一次commit,会留下记录

1、使用 git reset: 你可以使用 git reset 命令来取消最后的提交。这会将你的 HEAD 移动到上一次提交,并且将你的更改留在工作目录中。

1
git reset --soft HEAD~1

这里 HEAD~1 表示最后一个提交的父提交。--soft 选项意味着 Git 会保留工作目录和暂存区中的更改,只是移动 HEAD 指针。

2、使用 git revert: 如果你想要保留提交历史,并且创建一个新的提交来撤销最后一个提交的更改,你可以使用 git revert 命令。

1
git revert HEAD

这会创建一个新的提交,这个提交会反转最后一个提交的更改。这样,你的历史会保留原始提交和撤销提交。

已push想回滚

如果想要撤销最近的提交,可以使用 git reset 命令。这里有几种不同的方式来撤销提交,取决于想要的结果:

  1. –soft:这个选项会保留工作区和暂存区的更改,只是将 HEAD 移动到上一个提交。
    1
    git reset --soft HEAD~1
    这里的 HEAD~1 表示最后一个提交的父提交。这意味着更改仍然在暂存区中,可以重新提交它们。
  2. –mixed:这是 git reset 的默认选项,它会保留工作区的更改,但是会取消暂存区的提交。
    1
    git reset --mixed HEAD~1
    这会将更改从暂存区移回到工作区,可以选择重新添加它们并提交。
  3. –hard:这个选项会丢弃所有未提交的更改,包括工作区和暂存区的更改。
    1
    git reset --hard HEAD~1
    请小心使用这个选项,因为它会永久删除你的更改。只有在确定不需要这些更改时才使用。
  4. 指定提交哈希:如果想要撤销某个特定的提交,而不是最后一个提交,可以使用该提交的哈希值。
    1
    git reset --soft <commit-hash>
    替换 <commit-hash> 为想要撤销的提交的哈希值。
    请记住,这些操作只会影响本地仓库。如果你已经将提交推送到远程仓库,你将需要使用强制推送(git push --forcegit push --force-with-lease)来更新远程仓库的历史。但是,这可能会影响到其他协作者,执行撤销提交操作之前,建议先创建一个分支或者备份你的工作,以防不小心丢失更改。

总结笔记

以下是三种不同情况下在 Git 中进行回滚的笔记:

1. 本地仓库 commit 前回滚

在本地工作副本中,如果你做了更改但还没有提交(commit),你可以使用以下命令来回滚这些更改:

  • 放弃所有未暂存的更改:
    1
    git checkout .
    或者
    1
    git reset --hard HEAD
    这两个命令都会放弃工作目录中的所有更改,但 git checkout . 不会影响暂存区,而 git reset --hard HEAD 会清空暂存区。
  • 放弃特定文件的更改:
    1
    git checkout -- <file>
    这会放弃指定文件的更改,将其恢复到上次提交的状态。
  • 放弃所有未跟踪的文件和目录:
    1
    git clean -df
    请小心使用这个命令,因为它会永久删除未跟踪的文件和目录。

2. commit 后但未 push 回滚

如果你已经进行了本地提交但还没有推送到远程仓库,你可以使用以下命令来回滚提交:

  • 使用 git reset 回滚到最后一个提交:
    1
    git reset --soft HEAD~1
    这个命令会撤销最后一个提交,并将更改留在工作目录中,你可以重新提交它们。
  • 使用 git revert 创建一个新的提交来撤销最后一个提交:
    1
    git revert HEAD
    这会创建一个新的提交,这个提交会反转最后一个提交的更改。

3. commit 再 push 后回滚

如果你已经将提交推送到远程仓库,你不能直接回滚提交,因为这会改写历史记录。相反,你应该使用 git revert 来创建一个新的提交,这个提交会撤销之前的更改:

  • 回滚远程仓库中的提交:
    1
    2
    git revert <commit-hash>
    git push origin <branch-name>
    替换 <commit-hash> 为你想要撤销的提交的哈希值,<branch-name> 为你正在工作的分支名。
    请记住,git revert 不会改变现有的历史记录,而是会添加一个新的提交来反转指定提交的更改。这是回滚已经推送到远程仓库的提交的安全方式。
    在执行任何回滚操作之前,请确保你已经备份了重要的工作,以防不小心丢失更改。回滚操作是不可逆的,一旦执行,未提交的更改将无法通过 Git 恢复(除非你有其他备份)。