Git push不会做任何事情(一切都是最新的)

我正在尝试更新github上的git存储库。 我做了一堆的改变,添加了他们,然后尝试做一个git推。 答复告诉我,一切都是最新的,但显然不是。

git remote show origin 

回应我所期望的储存库。

为什么git在存储库中不存在本地提交时告诉我存储库是最新的?

  [searchgraph] git status # On branch develop # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Capfile # config/deploy.rb nothing added to commit but untracked files present (use "git add" to track) [searchgraph] git add . [searchgraph] git status # On branch develop # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: Capfile # new file: config/deploy.rb # [searchgraph] git commit -m "Added Capistrano deployment" [develop 12e8af7] Added Capistrano deployment 2 files changed, 26 insertions(+), 0 deletions(-) create mode 100644 Capfile create mode 100644 config/deploy.rb [searchgraph] git push Everything up-to-date [searchgraph] git status # On branch develop nothing to commit (working directory clean) 

git push不会推送你所有的本地分支:它如何知道哪些远程分支推送给他们? 它只推送已configuration推送到特定远程分支的本地分支。

在我的git版本(1.6.5.3)上,当我运行git remote show origin它实际上会打印出哪些分支被configuration为push:

 Local refs configured for 'git push': master pushes to master (up to date) quux pushes to quux (fast forwardable) 

问:但我可以推动master而不用担心这一切!

当你使用git clone ,默认情况下它会设置你的本地master分支来推送到远程的master分支(本地被称为origin/master ),所以如果你只在master提交,那么一个简单的git push会一直推回你的修改。

然而,从你发布的输出片段来看,你在一个名为develop的分支上,我猜测这个分支还没有被设置成任何东西。 所以没有参数的git push不会推送那个分支上的提交。

当它说“一切都是最新的”时,这意味着“你告诉我所有的分支都是最新的”。

问:那么我怎么能推我的提交?

如果你想要做的是把你的修改develop成为origin/master ,那么你应该把它们合并到你的本地master然后按下:

 git checkout master git merge develop git push # will push 'master' 

如果你想要在远程创build一个develop分支,与master分离,然后提供参数给git push

 git push origin develop 

那将会:在遥控器上创build一个新的分支,称为develop ; 并将该分支与您当地的develop分支进行更新; 设置develop推动origin/develop以便将来,无争议的推动推动自动develop

如果你想推动你的本地develop到一个远程分支称为develop 以外的东西,那么你可以说:

 git push origin develop:something-else 

然而,这种forms将不会 develop到将来始终推动origin/something-else ; 这是一次性的操作。

当我的Sourcetree应用程序在升级期间崩溃时,发生在我身上。 而在命令行上,好像以前的git add已经损坏了。 如果是这种情况,请尝试:

 git init git add -A git commit -m 'Fix bad repo' git push 

或者最后一个命令,你可能需要设置分支。

 git push --all origin master 

请记住,如果您没有进行任何分支或这种操作,就足够了。 在这种情况下,确保你推到正确的分支像git push origin develop

尝试:

 git push --all origin 

现在,看起来就像你在开发分支。 你的起源有你的发展分支吗? 如果不是的话,试试git push origin develop 。 一旦它知道你的起源的发展分支, git push将工作。

作为进一步阅读,我会看看git-push手册页 ,特别是示例部分。

请尝试去上次提交,然后git push origin HEAD:master

还要确保你推送到正确的分支。

当我在一个git推到github中间的时候,这发生在我身上。 然而,Github并没有表明已经做出了改变。 为了解决这个问题,我改变了自己的工作树,坚持了下来,再次推了一下。 它工作得很好。

对我来说,没有其他解决scheme的工作。 我不得不做一个新的修改文件的备份(显示与git status ),并运行一个git reset --hard 。 这使我能够与远程服务器重新alignment。 添加新的修改文件,并运行

 git add . git commit -am "my comment" git push 

诀窍了。 我希望这能帮助别人,作为“最后的机会”解决scheme。

感谢Sam Stokes。 根据他的回答,你可以用不同的方式解决问题(我用这种方式)。 更新你的开发目录后,你应该重新初始化它

 git init 

然后你可以提交并推送更新到主

相反,你可以尝试这一点,你不必去掌握,你可以直接强制从你的分支本身的变化

正如上面所解释的,当你做一个rebase,你正在改变你的分支的历史。 因此,如果您尝试在rebase之后执行正常的git push ,那么Git会拒绝它,因为从服务器上的提交到分支上的提交没有直接的path。 相反,您需要使用-f--force标志告诉Git,是的,您真的知道您在做什么。 强制推送时,强烈build议您将push.defaultconfiguration设置为简单,这是Git 2.0中的默认configuration。 要确保你的configuration是正确的,运行:

 $ git config --global push.default simple 

一旦这是正确的,你可以运行:

 $ git push -f 

并检查您的拉请求。 它应该更新!

转到此LINK的底部了解更多详情。

 git push origin master