如何撤消推送到主分支并合并的代码

问题描述 投票:0回答:1

我想撤消对合并的主分支的推送。

注意: 我记得推送到主分支不是一个好习惯,但是在我的本地存储库的主分支中显示了一些提交。所以,为了检查这些提交,我推送了代码,假设它不会自动合并。但是现在,在查看远程仓库时,它似乎已合并到主分支中。有没有办法撤销这个合并?

git github git-merge git-push git-revert
1个回答
0
投票

我推了代码,假设它不会自动合并。

它没有自动合并,事实上,技术上根本没有执行合并。您直接提交到主分支并将这些更改推送 到您的远程。这是预期的行为!

您可能想做的是使用像

git switch

 这样的命令在本地创建一个新分支,然后提交并将您的更改推送到该分支。


无论如何,您可以通过两种方式“撤消”您引入的提交

main

.

在任何一种情况下,您都应该使用

git log

 找到您想要返回的提交引用。对于我的示例,我将使用 HEAD~3
,这意味着在存储库的当前状态之后有 3 次提交。所以这假设我已经做了 3 次我想撤消的提交。

还原

如果你不介意混乱的 Git 历史,你可以使用

git revert

 来反转指定的提交。因此,例如,如果您添加了 5 行,这将引入一个删除这 5 行的新提交。

这是您在几乎所有情况下使用共享或受保护分支时应该做的事情。唯一的例外可能是特别敏感的情况,例如您不小心提交了凭据。

例子:

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 都将变得无效。

https://stackoverflow.com/a/72335696/6277798

如果这是您想采用的方法,您可以使用

git reset

 命令进行硬重置。

这会将您的历史记录重置回指定的提交引用,然后您可以将其强制推送到远程并修改历史记录。

根据您的远程设置,您可能必须明确启用强制推送到受保护的分支。

例子:

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
这将实现相同的目的,但您撤消的更改将保留在您的工作目录中。

© www.soinside.com 2019 - 2024. All rights reserved.