我使用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灾难覆盖了它。
所以,现在我想知道将我的东西放到远程存储库中的最佳方法是什么?
答案 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,您似乎已删除了提交C1
,C2
和C3
。实际上,C1'
,C2'
和C3'
中包含相同(或非常相似,除非您手动解决冲突)一组更改,因此您不会失去工作在这种情况下。由于git无法确定,因此您可以通过要求-f
标志来验证您是否真的想要这样做。
强制推送可能会导致在各种情况下丢失远程分支上的工作:
git pull
来解决这种情况。由于您独自工作,如果您对当地分支机构感到满意,那么您可以安全地进行强制推送。