3

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

[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_branch1,但是当我尝试推送 master 时,我收到一个关于无法快进并丢失历史记录的错误。feature_branch2git push origin feature_branchX

我有点明白这一点 - 我认为它不希望我输掉并C1回到分支点。但是我已经保存了,所以我不会失去它们。C2masterC1C2feature_branch1

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

4

2 回答 2

1

在 a 之后git checkout master,您可以git reset --hard origin/master将分支重置为与远程 master 相同的状态。

于 2012-10-05T01:08:42.373 回答
1

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

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

于 2012-10-05T01:15:38.770 回答