我在github上分叉了一个项目,创建了一个新分支并进行了一些更改(提交B,C和D),所以我有了以下树:
... <-- A (master)
\
B <-- C <-- D (branch2)
我错误地合并并删除了branch2
所以现在我有了这棵树:
... <-- A <-- B <-- C <-- D (master)
然而,我意识到我想维护一个反映上游变化的主分支,并创建了myproject-master来完成我的工作。我通过将它们重新定位到新分支来移动我的提交。在重新定位后,我通过<-- B <-- C <-- D
从主历史记录中删除了git reset --hard "A"
部分。我也蹲了C
和D
,我将从现在开始将该提交称为CD
。我的问题是我不能在master上推送我的更改,而且我在本地和远程有不同的树:
这是本地树(我希望双方都有):
... <-- A (master)
\
B <-- CD (myproject-master)
这是远程树:
... <-- A <-- B <-- C <-- D (master)
\
B <-- CD (myproject-master)
当我尝试推送master时,git会拒绝推送,所以我不会丢失数据。这很好,但我已经在另一个分支上有这些提交,并希望从主服务器中清除它们。我怎么能这样做?
答案 0 :(得分:2)
如果您是唯一在存储库中工作的人,则可以安全地将主分支“强制推送”到远程存储库,例如用:
git checkout master
git push -f myrepo master
...但是由于这会重写主分支的历史记录,如果有任何协作者在master
之前已经提取A
,则必须更加小心。