[英]Pushing an existing Git repository to Github only sends about half the commits?
我有一个本地Git存储库,我已经开发了几天:到目前为止它有18个提交。 今晚,我创建了一个私有的Github存储库,我希望将其推送到; 然而,当我这样做时,它最终只将18个提交中的8个提交给Github。 我删除了Github repo并重试,结果相同。
有关为什么会发生这种情况的任何想法? 我之前没有成功完成这个程序,所以我有点难过。
更新 :此回购中只有,而且一直只是主分支。 只是为了解决一些已发布的答案......
我看了一下有问题的存储库,这里是发生了什么:
git checkout [commit id]
。 这指出HEAD处于松散的提交而不是公认的分支。 我相信这是CesarB所指的“悬空HEAD”问题。 这个图表应该更清楚:
-- 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
现在指向commit 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等。
我想我要做的第一件事就是在你的本地存储库上运行git fsck
以确保它的状态良好。
我以前从未见过这个问题,我想不出可能出现的问题。
我没有直接评论CesarB早期答案的声誉,但gitk --all
在这种情况下不起作用,因为它只列出已知的分支。
gitk HEAD
显示了这个问题,但并不完全清楚。 吸烟枪是master
出现在提交树而不是最近的提交。
因此,事实证明两者都是:.git / refs / heads / master中的提交哈希是正确的,而.git / logs / refs / heads / master中的信息是不完整的; 因为我的意思是它只包括在.git / refs / heads / master中指定的提交哈希。
一旦我修复了这些文件(手动),并推回到Github,一切都再次变得肉汁。 我仍然不知道在这种情况下发生了什么事情,但我很高兴我至少弄清楚了解决方案。
如果有人想知道:修复.git / refs / heads / master,我只是用最新的提交哈希(HEAD)替换该文件的内容,并修复.git / logs / refs / heads / master,我只是将.git / logs / HEAD的内容复制到.git / logs / refs / heads / master中。 容易腻......不。
我有两次同样的问题,最后弄清楚我在做什么导致它。 在使用git rebase -i
编辑旧提交的过程中,我没有调用git commit -a
git commit --amend
,而是通过习惯强制调用git commit -a
,当然紧接着是git rebase --continue
。 其他人可能能够解释幕后发生的事情,但似乎结果是分离的HEAD问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.