如何使用Git撤销已推送的提交
如何使用Git撤销已推送的提交
技术背景
在使用Git进行版本控制时,有时会遇到需要撤销已推送提交的情况,例如推送的提交存在错误、包含敏感信息等。了解如何撤销已推送的提交对于维护代码的正确性和安全性至关重要。
实现步骤
单个提交的撤销
使用git revert <commit_hash>
命令可以创建一个新的提交,该提交会撤销指定提交的更改。示例如下:
1 |
|
多个提交的撤销
若要撤销一系列提交,可以使用如下命令:
1 |
|
部分Git版本也会撤销<oldest_commit_hash>
本身,所以要确认该提交是否被撤销。若需要删除最新的撤销提交(即撤销最旧提交的那个),可以使用git reset --hard HEAD~
。
找到提交的哈希值
可以使用git log
命令查看提交的哈希值。
重新应用已撤销的提交
通常撤销提交是因为发现推送的提交有问题。先使用git revert
将仓库恢复到稳定状态,推送撤销提交使远程仓库稳定。之后,在本地重新应用已撤销的提交,以便继续修复问题。
重新应用已撤销的提交,需要“撤销”撤销提交。再次执行git revert
命令,但这次使用撤销提交的范围。新的撤销提交将撤销之前的撤销提交,使文件恢复到第一次撤销之前的状态,然后修复问题、创建新提交并推送。
强制重置提交
可以使用以下命令撤销已推送的提交:
1 |
|
<commit_hash>
是你想要保留的最后一个提交的哈希代码。git clean -f -d
命令很危险,它会删除不在版本控制下的文件。
通过创建新分支撤销提交
假设分支名为develop
:
1 |
|
核心代码
撤销单个提交
1 |
|
撤销多个提交
1 |
|
强制重置提交
1 |
|
创建新分支撤销提交
1 |
|
最佳实践
- 在撤销提交前,先备份重要数据,以防意外丢失。
- 使用
git log
仔细确认要撤销的提交,避免误操作。 - 若多人协作,使用
--force
或--force-with-lease
选项时要谨慎,因为这可能会覆盖他人的提交。
常见问题
撤销提交时包含了不需要撤销的提交
可以使用git reset --hard HEAD~
删除最新的撤销提交,再重新执行git revert
命令,指定正确的提交范围。
强制推送导致他人提交丢失
若不小心使用--force
推送覆盖了他人的提交,可以从远程仓库的备份或其他开发者的本地仓库中恢复提交,然后重新合并。
撤销第一个提交
不能使用git rebase -i
撤销第一个提交,因为该命令依赖于前面的提交作为基准。可以考虑使用git filter-branch
或其他工具进行操作,但这些操作比较复杂,需谨慎使用。
如何使用Git撤销已推送的提交
https://119291.xyz/posts/how-to-undo-pushed-commits-using-git/