Git 撤销和重置:修复错误和维护代码一致性

2024-10-18

Git 基础知识:理解回滚和重置以维护代码的完整性和一致性

版本控制系统(VCS)是现代软件开发流程中不可或缺的一部分。在这些工具中,Git 站立得非常出色,因为它允许团队高效地管理更改并有效地协作。

情景示例: 在一个项目上管理更改

让我们想象一下,我们正在为后端的应用程序工作,这个项目涉及多名团队成员的贡献。几天前,项目的负责人意识到他们不小心将一些错误的代码推送到主分支上,这导致了应用程序的行为异常。这是由于未在版本控制历史中检查到旧开发环境中的文件直接从那里复制到了当前环境中。

目标:回滚这些更改,使应用程序按预期工作,并准确反映自那以后所做的所有操作。

应用 git reset

Git 提供的命令 git reset 允许你撤销最近的提交。这种方法适用于整个项目需要回滚的情况下,比如当主分支上有一个不希望的提交时。

# 撤销到某一次特定的提交之前的状态
git checkout <commit-hash>

# 或者撤消特定文件或目录的更改
git checkout -- <file-or-directory>

使用 git revert 更全面的解决方案

如果需要撤销较大的代码段,特别是大型仓库中不实际记录这些更改,Git 提供了命令 git revert。这个命令会创建一个新提交,该提交是之前提交的逆向操作。

# 回退到 'origin/main' 之前的所有提交
git revert -m 1 HEAD~3

# 或者特定撤销文件或目录的更改
git revert <commit-hash>

应用 git reset vs. git revert

  • 回滚 (git revert): 这种方式适用于你想要回到项目早期状态但不需要在未来的提交中记录这种变更。

    git revert <commit-hash>
    
  • 重置 (git reset --hard <commit-hash>-m <n>): 这个命令是更简单的方法,只需删除历史上的一个提交,而不创建新的提交。它改变了你的仓库的历史记录的外观。

    git reset --hard HEAD@{1}
    

总结

理解并有效地使用 git revertgit reset 命令在 Git 中维护代码完整性和一致性至关重要。这些工具使开发人员能够在需要时撤销最近的更改,修复错误,或者如果有必要的话,甚至可以返回到以前的状态。记住,在这种情况下,与项目中的相关方沟通回滚的原因是很重要的。 | 命令 | 用途 | 示例 | | --- | --- | --- | | git reset | 撤销最近的提交到指定状态 | | - git checkout <commit-hash>撤销到特定提交之前的状态
| - git checkout -- <file-or-directory>撤销特定文件或目录的更改
| git revert | 创建一个新的提交来撤销之前的提交,适用于大型修改或历史中不实际记录的变更 | | - git revert <commit-hash>撤销特定的提交 | - git revert -m 1 HEAD~3撤销到主分支之前的所有提交 | 使用 git reset vs. git revert | 这个命令是更简单的方法,只需删除历史上的一个提交,而不创建新的提交。它改变了你的仓库的历史记录的外观。 | | - git reset --hard <commit-hash>直接回滚到指定状态
| - -m <n> 重新生成提交信息和引用,适用于需要保留历史记录但不想要在主分支上创建的新提交的情况 |

Blog Post Image