git回滚
git回滚
nodaoli本地修改未commit回滚
- rollback变更文件
- 暂存区取消也是可以的
- delete删除文件
本地commit未push
1、放弃所有未跟踪和未暂存的更改:
1 | git checkout . # 放弃所有未暂存的更改 |
2、放弃所有更改(包括暂存区的更改):
1 | git reset --hard HEAD~1 |
这个命令会放弃所有未提交的更改,将你的工作目录和暂存区重置到上次提交的状态。
3、放弃特定文件的更改: 如果你只想要放弃特定文件的更改,可以使用以下命令:
1 | 复制 |
将 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
命令。这里有几种不同的方式来撤销提交,取决于想要的结果:
- –soft:这个选项会保留工作区和暂存区的更改,只是将 HEAD 移动到上一个提交。这里的
1
git reset --soft HEAD~1
HEAD~1
表示最后一个提交的父提交。这意味着更改仍然在暂存区中,可以重新提交它们。 - –mixed:这是
git reset
的默认选项,它会保留工作区的更改,但是会取消暂存区的提交。这会将更改从暂存区移回到工作区,可以选择重新添加它们并提交。1
git reset --mixed HEAD~1
- –hard:这个选项会丢弃所有未提交的更改,包括工作区和暂存区的更改。请小心使用这个选项,因为它会永久删除你的更改。只有在确定不需要这些更改时才使用。
1
git reset --hard HEAD~1
- 指定提交哈希:如果想要撤销某个特定的提交,而不是最后一个提交,可以使用该提交的哈希值。替换
1
git reset --soft <commit-hash>
<commit-hash>
为想要撤销的提交的哈希值。
请记住,这些操作只会影响本地仓库。如果你已经将提交推送到远程仓库,你将需要使用强制推送(git push --force
或git 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
2git revert <commit-hash>
git push origin <branch-name><commit-hash>
为你想要撤销的提交的哈希值,<branch-name>
为你正在工作的分支名。
请记住,git revert
不会改变现有的历史记录,而是会添加一个新的提交来反转指定提交的更改。这是回滚已经推送到远程仓库的提交的安全方式。
在执行任何回滚操作之前,请确保你已经备份了重要的工作,以防不小心丢失更改。回滚操作是不可逆的,一旦执行,未提交的更改将无法通过 Git 恢复(除非你有其他备份)。