如何撤销已提交的 Git 推送并还原更改

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本教程中,我们将深入探讨 Git 的世界,学习如何撤销已提交的 Git 推送并还原更改。无论你是不小心推送了需要还原的代码,还是想要保持干净的 Git 历史记录,本指南都将为你提供有效管理项目版本控制所需的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/CollaborationandSharingGroup(["Collaboration and Sharing"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/DataManagementGroup -.-> git/reset("Undo Changes") git/DataManagementGroup -.-> git/restore("Revert Files") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") git/CollaborationandSharingGroup -.-> git/push("Update Remote") subgraph Lab Skills git/commit -.-> lab-411662{{"如何撤销已提交的 Git 推送并还原更改"}} git/reset -.-> lab-411662{{"如何撤销已提交的 Git 推送并还原更改"}} git/restore -.-> lab-411662{{"如何撤销已提交的 Git 推送并还原更改"}} git/rebase -.-> lab-411662{{"如何撤销已提交的 Git 推送并还原更改"}} git/push -.-> lab-411662{{"如何撤销已提交的 Git 推送并还原更改"}} end

理解 Git 提交与推送

什么是 Git 提交?

Git 提交是项目文件在特定时间点的一个快照。当你对项目进行更改并想要保存这些更改时,你就创建一个新的提交。每个提交都有一个唯一标识符,称为提交哈希,它使你能够追踪项目的历史记录。

Git 提交的构成

一个 Git 提交由以下元素组成:

  • 作者:做出更改并创建提交的人。
  • 提交者:最终确定提交的人(通常与作者相同)。
  • 提交消息:对提交中所做更改的简要描述。
  • 提交哈希:提交的唯一标识符,通常是一长串字母和数字。
  • 父提交:此提交所基于的前一个提交。

Git 推送

在你对本地 Git 仓库进行了一系列提交之后,你可以将这些提交推送到远程仓库,比如 GitHub 或 GitLab。这使你能够与他人共享你的工作并在项目上进行协作。

graph LR A[Local Repository] -- Push --> B[Remote Repository]

当你将提交推送到远程仓库时,实际上是将本地提交发送到远程服务器,使其他协作者也能访问。

撤销已提交的更改

有时,你可能需要撤销已经提交并推送到远程仓库的更改。这就是“撤销已提交的 Git 推送”概念发挥作用的地方,我们将在下一节中探讨。

撤销已提交的 Git 推送

了解后果

当你将提交推送到远程仓库时,其他协作者就可以访问这些提交。撤销已提交的 Git 推送可能会产生后果,因为这可能会影响到那些已经拉取了你想要撤销的提交的其他人的工作。

识别有问题的提交

撤销已提交的 Git 推送的第一步是识别你想要撤销的有问题的提交。你可以使用 git log 命令来查看提交历史记录,并找到你需要还原的特定提交。

git log

还原提交

一旦你识别出有问题的提交,就可以使用 git revert 命令来撤销该提交所引入的更改。这会创建一个新的提交来撤销这些更改,同时保留提交历史记录。

git revert <commit_hash>
git push

覆盖远程仓库

创建还原提交后,你需要将更改推送到远程仓库。这将用你的本地更改覆盖远程仓库,从而有效地撤销已提交的 Git 推送。

git push

注意事项

请记住,撤销已提交的 Git 推送可能会造成干扰,特别是当其他人已经拉取了你试图撤销的提交时。与你的团队进行沟通并协调还原过程以尽量减少任何潜在的冲突或问题是很重要的。

在 Git 中还原更改

撤销本地更改

如果你对本地仓库进行了更改但尚未提交,可以使用 git restore 命令来丢弃更改并还原到上一次提交的状态。

git restore <file_name>

这将丢弃你对指定文件所做的更改,并将其还原到上一次提交的版本。

还原已提交的更改

如果你已经提交了一个更改并想要撤销它,可以使用 git revert 命令。这会创建一个新的提交来撤销指定提交所引入的更改。

git revert <commit_hash>

这将创建一个新的提交来还原指定提交中所做的更改,同时保留提交历史记录。

重置到之前的提交

在某些情况下,你可能想要完全丢弃某个时间点之后所做的所有提交,并将仓库重置到之前的状态。为此,你可以使用 git reset 命令。

git reset <commit_hash>

这会将你的本地仓库重置到指定的提交,丢弃该提交之后所做的所有提交。使用 git reset 时要小心,因为如果使用不当可能会造成破坏性影响。

还原与重置的比较

操作 效果 提交历史
git revert 创建一个新的提交来撤销更改 保留
git reset 丢弃指定提交之后的所有提交 改变

git revertgit reset 之间的选择取决于你的具体需求以及你想要对提交历史产生的影响。

总结

在本教程结束时,你将全面了解如何撤销已提交的 Git 推送并还原更改。你将能够自信地管理项目的版本控制,确保代码保持原始状态且 Git 历史记录得到妥善维护。掌握这些技术将使你能够掌控 Git 工作流程并维护项目的完整性。