我有一个本地Git存储库,我已经开发了几天:到目前为止它有18个提交.今晚,我创建了一个私有的Github存储库,我希望将其推送到; 然而,当我这样做时,它最终只将18个提交中的8个提交给Github.我删除了Github repo并重试,结果相同.
有关为什么会发生这种情况的任何想法?我之前没有成功完成这个程序,所以我有点难过.
更新:此回购中只有,而且一直只有主分支.只是为了解决一些已发布的答案......
我看了一下有问题的存储库,这里是发生了什么:
在某些时候,rpj已经表演了git checkout [commit id]
.这指出HEAD处于松散的提交而不是公认的分支.我相信这是CesarB所指的"悬空HEAD"问题.
没有意识到这个问题,他继续改变和提交它们,每次都让HEAD起来.然而,HEAD只是指着悬挂的一系列承诺,而不是一个公认的分支.
当他去推动他的改变时,git将所有东西都推到了主人的顶端,这只是当前他所在的树的一半.
随之而来的是混乱
这个图表应该更清楚:
-- D -- E -- F / ^ A -- B -- C - | ^ ^ HEAD | | remote master
当他试图推动他的变化时,只有A
通过C
被推动并向上remote
移动C
.他无法D
通过F
推送进行提交,因为他们没有被已知的分支引用.
这是你在这种状态下所看到的:
$ git branch * (no branch) master
解决方案是master
提升到F
悬挂的提交链中.这就是我做到的.
为当前状态创建合法分支:
git checkout -b tmp
该tmp
分支正指向在提交F
该图中上述
快进master
到tmp
git checkout master
git merge tmp
master
现在指向提交F
.
扔掉你的临时分支
git branch -d tmp
您可以愉快地推送到远程存储库,它应该发送所有更改.
从Git 1.7.3开始,您可以使用一个简单的命令执行此操作:
git checkout -B master
该-b
开关装置"检查出来之前,在这里创建分支",并-B
是该无条件版本,"即使转移已经存在-在这种情况下,在这里将它检查出来之前".
解决此类问题的一种非常简单的方法是删除master
分支并重新创建它.毕竟,git中的master
分支只是提交的名称,而分支并不特别.
因此,假设当前提交是您想要的提交master
,您只需这样做
git branch -D master
删除现有master
分支,然后执行
git checkout -b master
a)创建一个新的分支master
,指向当前提交,b)更新HEAD
指向master
分支.在那之后,HEAD
将被附加master
,因此master
每当你提交时将继续前进.