Git 如何仅将最后一次提交推送到新添加的空存储库?
我有一个gitGit 如何仅将最后一次提交推送到新添加的空存储库?,git,github,heroku,push,commit,Git,Github,Heroku,Push,Commit,我有一个gitorigin存储库,有85次提交。在这个项目中,我还有Heroku远程存储库和第三个新添加的test空存储库。我想将我的最新提交推送到测试存储库。我使用git推送测试77feq3231bc0fd432233214af3e224ds397397:master来尝试它,但是我得到了: error: unable to push to unqualified destination: master The destination refspec neither matches an ex
origin
存储库,有85次提交。在这个项目中,我还有Heroku远程存储库和第三个新添加的test
空存储库。我想将我的最新提交推送到测试存储库。我使用git推送测试77feq3231bc0fd432233214af3e224ds397397:master来尝试它,但是我得到了:
error: unable to push to unqualified destination: master
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@github.com:myuser/test.git'
有什么办法可以解决吗?如果不同时推送提交背后的所有历史记录,直到提交,而另一端没有这些历史记录,则无法推送提交
也就是说,哪里出错是一个简单的语法问题。你只需要写:
git push test <hash>:refs/heads/master
(其中,$remote
是一个远程名称,如test
,或一个原始URL,$hash
是一个提交哈希ID)。Git只知道有一个对象ID,$hash
,它应该发送给另一个Git。然后,它应该要求另一个Git为该散列ID设置一个引用名称。您提供的引用名称是master
——但那是分支名称refs/heads/master
?或者它是标签名refs/tags/master
?还是完全是另一个名字
你的Git也会查看他们所有的Git参考。但是test
存储库是空的,没有refs,因此您的Git在那里找不到refs/heads/master
,因此不能将其用作全名
通常情况下,Git会从:
的左侧找到这一点,例如,Git推送测试xyzy:master
会让Git查找名称xyzy
。这可能是一个分支名称-refs/heads/xyzy
,也可能是一个标记名称,refs/tags/xyzy
。这会告诉你的Git:“啊,不要只要求另一个Git设置master
,让它设置refs/heads/master
或refs/tags/master
,这取决于xyzy
”。因此,如果无法只推一次提交,那么解决方案似乎是删除Git,并在初始提交时再创建一次。然后所有需要的文件都将在此提交中,这样就可以只将最新的文件推送到新添加的GitHub存储库?您可以进行一次提交,其历史记录仅为一次提交。这就是当您对使用git checkout--orphant创建的分支进行新提交时发生的情况。在此之后进行的新提交是根提交,所以它的历史记录就是它本身。好的,但是让我们假设我的github存储库中已经有一个分支主节点,有三次提交。您能告诉我如何只推送最新的一次提交吗?创建一个没有历史记录的新提交。首先,设置索引,使其具有新提交中所需的内容。(要执行此操作,请签出您想要的内容,这可能意味着“签出主机的提示提交”,这可能是您已经在的位置。此指令的要点是确保索引与新提交的内容匹配。)然后,运行git checkout--orphan newbranch
,然后运行git commit
创建新分支。现在,您有了一个分支,它的整个历史记录都是一次提交:您刚才所做的提交。将该分支推到[继续]。。。将该分支推送到任何位置的任何存储库都将在该存储库中创建一个单提交分支,如果成功的话。
git push $remote $hash:master