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.default
configuration设置为简单,这是Git 2.0中的默认configuration。 要确保你的configuration是正确的,运行:
$ git config --global push.default simple
一旦这是正确的,你可以运行:
$ git push -f
并检查您的拉请求。 它应该更新!
转到此LINK的底部了解更多详情。
git push origin master