我有一个像别人的 repo 的分支,并且像这样对我的主分支进行了一些更改,并推送到我的分支:
[upstream/master] --- C1 --- C2[origin/master]
然后我决定我希望我的更改
C1
和 C2
成为分支 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
和 feature_branch2
( git push origin feature_branchX
),但是当我尝试推送 master 时,我收到一个关于无法快进和丢失历史记录的错误。我有点明白了 - 我认为它不希望我通过将
C1
移回分支点而丢失 C2
和 master
。但是我已经在 C1
中保存了 C2
和 feature_branch1
,所以我不会丢失它们。有什么办法可以实现上图吗?
最佳答案
如果您将 --force
标志添加到您的推送中,它应该会成功。
重写历史一旦被推送就被认为是一件坏事,因为如果其他人克隆了你的 master 并 pull 了你正在删除的提交,他们会遇到问题,因为他们的 refs 不再存在。
关于git 切换推送后哪个分支是主分支,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12738151/