我想撤消对合并的主分支的推送。
注意: 我记得推送到主分支不是一个好习惯,但是在我的本地存储库的主分支中显示了一些提交。所以,为了检查这些提交,我推送了代码,假设它不会自动合并。但是现在,在查看远程仓库时,它似乎已合并到主分支中。有没有办法撤销这个合并?
我推了代码,假设它不会自动合并。
它没有自动合并,事实上,技术上根本没有执行合并。您直接提交到主分支并将这些更改推送 到您的远程。这是预期的行为!
您可能想做的是使用像 这样的命令在本地创建一个新分支,然后提交并将您的更改推送到该分支。main
.在任何一种情况下,您都应该使用 找到您想要返回的提交引用。对于我的示例,我将使用
HEAD~3
,这意味着在存储库的当前状态之后有 3 次提交。所以这假设我已经做了 3 次我想撤消的提交。还原
例子:
git revert -n HEAD~3..HEAD
git add .
git commit -m "Remove the last 3 commits."
git push origin main
这将引入 1 个新提交,这将反转对 main
.的最后 3 次提交中所做的更改 重置
remove 提交,从而改变 Git 历史。这通常 not 对于像 main
这样的共享分支来说是个好主意。
更改共享分支的 Git 历史很少是一个好主意,最好避免。这可能有一些例外,例如删除意外推送的凭据。如果这是您想采用的方法,您可以使用 命令进行硬重置。 这会将您的历史记录重置回指定的提交引用,然后您可以将其强制推送到远程并修改历史记录。所以,你要做的是改变提交历史,这对所有未来的提交都有级联效应,所以任何检查过你的代码的人都需要在之后重置到远程,任何挂起的 PR 都将变得无效。
—
根据您的远程设置,您可能必须明确启用强制推送到受保护的分支。
例子:
git reset --hard HEAD~3
git push origin main --force-with-lease
这会将您的本地存储库重置为 3 次提交之前,然后强制推送到您的远程,这也会从那里删除 3 次提交。如果您想保留 3 次提交的更改,那么最好进行软重置,并在强制推送之前存储更改。
例子:
git reset --soft HEAD~3
git stash
git push origin main --force-with-lease
git stash pop
这将实现相同的目的,但您撤消的更改将保留在您的工作目录中。