将现有的Git存储库推送到Github只发送大约一半的提交?

我有一个本地Git仓库,我一直在开发几天:它迄今有18个提交。 今晚,我创建了一个私人的Github存储库,我希望能推动它; 然而,当我这样做的时候,它最终只能将十八个提交中的八个提交给Github。 我删除了Github repo并重新尝试,结果相同。

任何想法为什么这可能会发生? 我之前没有成功完成这个程序,所以我有点难住。

更新 :只有这个回购中的主分支存在且一直存在。 只是为了解决一些发布的答案...


我看了一下有关存储库的问题,这是怎么回事:

  • 在某些时候,rpj执行了git checkout [commit id] 。 这指出HEAD在一个松散的提交而不是一个公认的分支。 我相信这是CesarB所指的“摇摇欲坠的HEAD”问题。
  • 没有意识到这个问题,他继续进行修改并提交它们,每次都碰到HEAD。 然而,HEAD只是指着一个悬而未决的承诺链,而不是一个公认的分支。
  • 当他去推动他的变化时,git把所有东西都推到了主人的顶端,这只是他目前树上的一半。
  • 随之而来的是混乱
  • 这张图应该更加清楚:

                     -- D -- E -- F
                    /             ^
       A -- B -- C -              |
       ^         ^               HEAD
       |         |
     remote    master
    

    当他试图推动他的变化时,只有AC被推动并remote移动到C 他无法通过F提交D提交,因为它们没有被已知分支引用。

    以下是您处于此状态时看到的内容:

    $ git branch
    * (no branch)
    master
    

    解决的办法是将master移到提交链中的F处。 这是我做到的。

  • 为当前状态创建一个合法分支:

    git checkout -b tmp

  • tmp分支现在指向上图中的提交F
  • 快速转发mastertmp

    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等。

    链接地址: http://www.djcxy.com/p/92233.html

    上一篇: Pushing an existing Git repository to Github only sends about half the commits?

    下一篇: SSH key issues