Git:在rebase之后无法获得分支

时间:2014-04-05 17:29:59

标签: git git-branch

我使用Eclipse和EGit。我使用远程存储库,而我是唯一一个使用它的人

我有一个git存储库,在某些时候看起来像这样

A-B-C-D-E (Master)
     \
      C1-C2-C3 (branch: New_Design)

然后我用Master重新设置了New_Design分支,使其与E

保持一致

我理解这意味着它应该看起来像这样

A-B-C-D-E (Master)
         \
          C1-C2-C3 (branch: New_Design)

当我随后向New_Design添加更多更改并且提交时,所有更改似乎都有效。

A-B-C-D-E (Master)
         \
          C1-C2-C3-C4-C5-C6 (branch: New_Design)

但是当我检查远程存储库时,没有注册任何提交。实际到达的最后一次提交是post rebase commit。

当我进入命令行(EGit有时似乎吞下某些错误)时,我看到了这个

To https://repo@bitbucket.org/project/project-web.git
! [rejected]        New_Design -> New_Design (non-fast-forward)
error: failed to push some refs to    'https://repo@bitbucket.org/project/project-web.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.

我试过并执行了

git pull -origin New_Design

因此我的项目被repo中的旧版本覆盖。我看到各种合并冲突与Eclipse提供给我的默认选项是接受" old"版。幸运的是,在此操作之前我已经对目录结构进行了本地备份,我基本上用pre git pull灾难覆盖了它。

所以,现在我想知道将我的东西放到远程存储库中的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

当您将已经推送到远程存储库的提交重新绑定时,需要在将新重新分支的分支推送到远程数据库时指定强制标志。

git push origin New_Design -f 

为什么会发生这种情况

您的远程分支看起来像:

A - B - C - C1 - C2 - C3

在rebase之后,您的本地分支看起来像:

A - B - C - D - E - C1' - C2' - C3' - C4 - C5 - C6

要使用git,您似乎已删除了提交C1C2C3。实际上,C1'C2'C3'中包含相同(或非常相似,除非您手动解决冲突)一组更改,因此您不会失去工作在这种情况下。由于git无法确定,因此您可以通过要求-f标志来验证您是否真的想要这样做。

强制推送可能会导致在各种情况下丢失远程分支上的工作:

  • 如果您有其他人在远程存储库上工作,他们的更改不会反映在您的本地分支中。 Git建议git pull来解决这种情况。
  • 如果您在本地分支上重写了历史记录并删除或更改了提交。

由于您独自工作,如果您对当地分支机构感到满意,那么您可以安全地进行强制推送。