我有一个别人的repo的分支,并且像我这样对我的主分支进行了一些更改,然后推到我的分支:
[upstream/master] --- C1 --- C2[origin/master]
然后我决定我希望我的更改C1
和C2
成为分支feature_branch1
的一部分,我希望我的master
分支返回{{ 1}}:
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
移回分支点,我不希望丢失C1
和C2
。但我已经在master
中保存了C1
和C2
,所以我不会丢失它们。
有什么方法可以实现上图吗?
答案 0 :(得分:1)
在git checkout master
之后,您可以执行git reset --hard origin/master
将分支重置为与远程主服务器相同的状态。
答案 1 :(得分:1)
如果您在推送中添加--force
标记,则应该会成功。
重写历史记录被认为是一件坏事,因为如果其他人克隆了您的主人并撤消了您要删除的提交,他们将遇到问题,因为他们已经不再存在引用。