【问题标题】:Undoing git push and pushing to another branch撤消 git push 并推送到另一个分支
【发布时间】:2021-06-28 08:28:27
【问题描述】:

我有一个我一直在处理的分支(它是从 master 分支出来的)。我们称之为功能/ABC-1。它还没有被合并回master。 我的一位同事从我的 feature/ABC-1 分支分支并在他的私人分支上做了一些工作。我们称它为私有/ABC-extra。

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

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

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

这在 git 中可能吗?如果是这样,请告诉我如何。

谢谢!

附:我是一个 git 初学者。我只知道一些基本的命令和概念。因此,请具体说明命令,不要做出假设。 (否则我不会明白你的意思:D)。

【问题讨论】:

    标签: git branch git-push


    【解决方案1】:

    让我们分两步解决:

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

    您可以使用以下命令将 feature/ABC-1 重新设置为 private/ABC-extra 来做到这一点:

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

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

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

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

    首先,使用 git log 来检查你想删除多少次提交:

    git checkout feature/ABC-1
    git log
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 2016-07-13
      • 2012-11-08
      • 2017-12-18
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2010-11-19
      相关资源
      最近更新 更多