将现有的Git存储库推送到Github只发送大约一半的提交?
我有一个本地Git仓库,我一直在开发几天:它迄今有18个提交。 今晚,我创建了一个私人的Github存储库,我希望能推动它; 然而,当我这样做的时候,它最终只能将十八个提交中的八个提交给Github。 我删除了Github repo并重新尝试,结果相同。
任何想法为什么这可能会发生? 我之前没有成功完成这个程序,所以我有点难住。
更新 :只有这个回购中的主分支存在且一直存在。 只是为了解决一些发布的答案...
我看了一下有关存储库的问题,这是怎么回事:
git checkout [commit id]
。 这指出HEAD在一个松散的提交而不是一个公认的分支。 我相信这是CesarB所指的“摇摇欲坠的HEAD”问题。 这张图应该更加清楚:
-- D -- E -- F
/ ^
A -- B -- C - |
^ ^ HEAD
| |
remote master
当他试图推动他的变化时,只有A
到C
被推动并remote
移动到C
他无法通过F
提交D
提交,因为它们没有被已知分支引用。
以下是您处于此状态时看到的内容:
$ 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
都会前进。
检查你是否推动正确的分支机构,并确保分支机构实际上拥有你认为他们拥有的东西。 特别是,检查你是否没有分离的HEAD,如果不是故意的,可能会令人困惑。
最简单的检查方法是使用gitk --all
,它以图形方式显示所有分支,HEAD等。
上一篇: Pushing an existing Git repository to Github only sends about half the commits?
下一篇: SSH key issues