撤消 git 推送并推送到另一个分支

Undoing git push and pushing to another branch

我有一个我一直在做的分支(它是从 master 分支出来的)。我们称它为 feature/ABC-1。它尚未合并回 master。 我的一位同事从我的 feature/ABC-1 分支分支出来,并在他的私人分支上做了一些工作。我们称它为 private/ABC-extra.

他需要我修复一些东西才能继续在他的私有分支上工作,所以我进行了修复并推送了我的更改。

不幸的是,我将更改推送到我的原始分支 (feature/ABC-1) 而不是他的私有分支 (private/ABC-extra)。

我想以某种方式撤消我的推送,然后将更改推送到他的私有分支。 但我想以一种方式做到这一点,让他觉得我一开始就没有做出糟糕的推动。我不希望他必须解决任何冲突或有一些奇怪的历史错误或类似的事情。

这在 git 中可行吗?如果可以,请告诉我怎么做。

谢谢!

P.S。我是 git 初学者。我只知道一些基本的命令和概念。所以请具体命令,不要做假设。 (否则我不会明白你的意思 :D )。

分两步解决:

首先,让我们用 feature/ABC-1 更改更新 private/ABC-extra

您可以使用以下命令将 feature/ABC-1 变基为 private/ABC-extra 来完成此操作:

git checkout private/ABC-extra
git rebase feature/ABC-1
git push

现在,您已将 feature/ABC-1 的所有更改都重新基于 private/ABC-extra,并将这些更改推送到远程。

其次,让我们从远程删除更改 feature/ABC-1

为此,您需要先从本地存储库中删除更改,然后强制将您的分支推送到远程。

首先,使用 git 日志检查您要删除多少次提交:

git checkout feature/ABC-1
git log

然后你可以删除这些提交,假设你想删除最后 3 个提交:

git reset HEAD~3 --hard
git push --force

但是请注意,通过使用 --force 标志,您将强制远程分支与您的本地分支完全匹配,从而丢失您没有本地分支的任何提交。