Rebase在远程分支上提交

时间:2011-10-16 13:36:20

标签: git rebase

我在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"部分。我也蹲了CD,我将从现在开始将该提交称为CD。我的问题是我不能在master上推送我的更改,而且我在本地和远程有不同的树:

这是本地树(我希望双方都有):

... <-- A                     (master)
         \
          B <-- CD            (myproject-master)

这是远程树:

... <-- A <-- B <-- C <-- D   (master)
         \
          B <-- CD            (myproject-master)

当我尝试推送master时,git会拒绝推送,所以我不会丢失数据。这很好,但我已经在另一个分支上有这些提交,并希望从主服务器中清除它们。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果您是唯一在存储库中工作的人,则可以安全地将主分支“强制推送”到远程存储库,例如用:

git checkout master
git push -f myrepo master

...但是由于这会重写主分支的历史记录,如果有任何协作者在master之前已经提取A,则必须更加小心。