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

Jam*_*ong 95 git dvcs

我正在尝试更新GitHub上的Git存储库.我做了一些更改,添加了它们,然后尝试做了一个git push.回复告诉我一切都是最新的,但显然不是.

git remote show origin
Run Code Online (Sandbox Code Playgroud)

用我期望的存储库响应.

为什么当存在在存储库中看不到的本​​地提交时,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)
Run Code Online (Sandbox Code Playgroud)

Sam*_*kes 136

git push并没有推动你所有的本地分支:它如何知道将它们推送到哪个远程分支?它仅推送已配置为推送到特定远程分支的本地分支.

在我的Git版本(1.6.5.3)上,当我运行git remote show origin它时实际打印出哪些分支配置为推送:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)
Run Code Online (Sandbox Code Playgroud)

问:但是我可以在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'
Run Code Online (Sandbox Code Playgroud)

如果你想要的是develop在遥控器上创建一个分支,分开master,然后提供参数git push:

git push origin develop
Run Code Online (Sandbox Code Playgroud)

那将:在遥控器上创建一个新的分支develop; 把该分支最新的与您当地的develop分公司; 设置develop为推送到origin/develop将来,git push没有参数develop自动推送.

如果你想将你的本地推develop送到一个叫做其他 东西的远程分支develop,你可以说:

git push origin develop:something-else
Run Code Online (Sandbox Code Playgroud)

然而,这种形式不会设置develop总是推到origin/something-else未来; 这是一次性操作.

  • 谢谢你的细节.我在错误的分支= _ = (2认同)

Vik*_*Vik 23

当我的SourceTree应用程序在升级期间崩溃时,这发生在我身上.在命令行上,似乎前一个git add已经被破坏了.如果是这种情况,请尝试:

git init
git add -A
git commit -m 'Fix bad repo'
git push
Run Code Online (Sandbox Code Playgroud)

在最后一个命令中,您可能需要设置分支.

git push --all origin master
Run Code Online (Sandbox Code Playgroud)

请记住,如果您没有进行任何分支或任何类型的分支,这就足够了.在这种情况下,请确保您按下正确的分支git push origin develop.


asa*_*roq 13

尝试:

git push --all origin
Run Code Online (Sandbox Code Playgroud)


uru*_*ong 11

请尝试去最后一次提交,然后再做git push origin HEAD:master.


And*_*rea 6

就我而言,其他解决方案均无效。我必须备份新修改的文​​件(用 显示git status),然后运行git reset --hard. 这使我能够重新调整远程服务器。添加新的修改文件,并运行

git add .
git commit -am "my comment"
git push
Run Code Online (Sandbox Code Playgroud)

做到了。我希望这对某人有所帮助,作为“最后一次机会”的解决方案。


the*_*eIV 5

现在,您似乎位于开发分支上。你的origin上有一个develop分支吗?如果没有,请尝试git push origin developgit push一旦它知道您的起源上的开发分支,它将起作用。

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