我正在使用 Git 开发一个项目,我意识到最后几次提交包含我需要更正的错误。我想撤消这些提交,但将更改保留在我的工作目录中,以便我可以在再次提交之前修复它们。
在不丢失任何工作的情况下实现这一目标的最佳方法是什么?另外,如果提交已经被推送到远程存储库,这个过程会有什么不同?
任何有关处理这种情况的最佳实践的建议将不胜感激!
在不丢失任何工作的情况下实现这一目标的最佳方法是什么?另外,如果提交已经被推送到远程存储库,这个过程会有什么不同?
如果提交尚未推送到远程存储库,您可以使用
git reset
。例如,要放弃最后四次提交而不在工作目录中进行任何更改:
git reset HEAD~4
您还可以
git reset
到特定提交:
git reset <commit_hash>
执行此命令后,这些提交中的所有修改都将保留为未暂存的更改。
如果提交已被推送到远程存储库,您可以做出一些选择。您可以遵循与上述相同的过程,然后强制推送 (
git push --force-with-lease
) 到远程存储库,但如果其他人正在使用同一存储库,则此影响可能会出现问题。如果您正在自己的功能分支中工作,但尚未作为拉取请求提交,这可能是一个不错的选择。
否则,您最好的选择可能是接受这些提交将永远存在。在这种情况下,最好的选择就是创建新的提交并进行必要的更正,并将其推送到远程存储库,就像任何其他更改集一样。
一如既往,如果您不确定所给的命令是否会产生预期的影响,请考虑在测试分支或本地目录的副本中进行试验。