我有一个像别人的 repo 的分支,并且像这样对我的主分支进行了一些更改,并推送到我的分支:

[upstream/master] --- C1 --- C2[origin/master]

然后我决定我希望我的更改 C1C2 成为分支 feature_branch1 的一部分,我希望我的 master 分支回到 upstream/master :
[upstream/master === origin/master] --- C1 --- C2[origin/feature_branch1]

我通过以下方式实现了这一目标:
git checkout C2
git branch -m feature_branch1
git checkout upstream/master
git branch -m master

(不知道这是否是我打算这样做的方式)。

然后我在 master 分支上添加了一些额外的功能,如下所示:
                                     C1 --- C2 [origin/feature_branch1]
                                   /
[upstream/master === origin/master]
                                   \
                                     C1' --- C2' [origin/feature_branch2]

( git checkout master; git checkout -b feature_branch2; <changes>; <commits> )

现在我正在尝试推送到远程。我已经成功推送了 feature_branch1feature_branch2 ( git push origin feature_branchX ),但是当我尝试推送 master 时,我收到一个关于无法快进和丢失历史记录的错误。

我有点明白了 - 我认为它不希望我通过将 C1 移回分支点而丢失 C2master。但是我已经在 C1 中保存了 C2feature_branch1,所以我不会丢失它们。

有什么办法可以实现上图吗?

最佳答案

如果您将 --force 标志添加到您的推送中,它应该会成功。

重写历史一旦被推送就被认为是一件坏事,因为如果其他人克隆了你的 master 并 pull 了你正在删除的提交,他们会遇到问题,因为他们的 refs 不再存在。

关于git 切换推送后哪个分支是主分支,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12738151/

10-14 23:52
查看更多