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

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

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)
Jamie Wong asked 2019-09-11T06:55:43Z
14个解决方案
130 votes

git clone没有推送所有本地分支机构:如何知道将它们推送到哪个远程分支机构? 它仅推送已配置为推送到特定远程分支的本地分支。

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

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

问:但我可以推到git clone而不用担心这一切!

当您git clone时,默认设置您的本地master分支以推送到远程的master分支(本地称为origin/master),因此如果您只提交develop,那么简单的origin/something-else将始终推送您的更改。

但是,从您发布的输出片段,您在一个名为develop的分支上,我猜测它还没有被设置为推送到任何东西。 所以没有参数的origin/something-else将不会推送该分支上的提交。

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

问:那么如何推送我的提交?

如果您想要做的是将您的更改从develop更改为origin/something-else,那么您应该将它们合并到您的本地develop然后推送:

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

如果你想要的是在遥控器上创建develop分支,与origin/something-else分开,则提供参数develop

git push origin develop

那将:在遥控器上创建一个名为develop的新分支; 并使该分支机构与您当地的origin/something-else分公司保持联系; 并设置develop以推送到origin/develop以便将来,git push不带参数将自动推送develop

如果您想将本地develop推送到名为origin/something-else以外的远程分支,那么您可以说:

git push origin develop:something-else

但是,该表格将不会设置develop,以便将来始终推送至origin/something-else; 这是一次性操作。

Sam Stokes answered 2019-09-11T06:57:11Z
22 votes

当我的SourceTree应用程序在升级期间崩溃时,这发生在我身上。 在命令行上,似乎以前的git push origin develop已损坏。 如果是这种情况,请尝试:

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

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

git push --all origin master

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

Vik answered 2019-09-11T06:57:53Z
13 votes

尝试:

git push --all origin
asandroq answered 2019-09-11T06:58:14Z
8 votes

请尝试转到最后一次提交,然后执行git push origin HEAD:master

uruapanmexicansong answered 2019-09-11T06:58:40Z
4 votes

现在,它出现在您的开发分支上。 你有自己的发展分支吗? 如果没有,请尝试git push origin develop.git push一旦知道您的起源上的开发分支就会工作。

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

theIV answered 2019-09-11T06:59:15Z
3 votes

具体而言,如果要将某些内容合并到主控,可以按照以下步骤操作。

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

拉动请求模型中的常见做法是创建新的本地分支,然后将该分支推送到远程。 为此,您需要提到您希望在远程推送更改的位置。你可以通过在推送时提到遥控器来做到这一点。

git push origin develop // It will create a remote branch with name "develop".

如果要创建除本地分支名称以外的分支,可以使用以下命令执行此操作。

git push origin develop:some-other-name
Manu answered 2019-09-11T06:59:55Z
1 votes

当我git push到GitHub的git push时,这发生在我身上。 然而,GitHub没有表明已经做出了改变。

为了解决这个问题,我对我的工作树进行了更改,然后再次推送。 它工作得非常好。

helsont answered 2019-09-11T07:00:29Z
1 votes

就我而言,其他解决方案都没有奏效。 我不得不备份新修改的文件(显示为git status),并运行git reset --hard.这使我可以重新调整远程服务器。 添加新修改的文件,然后运行

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

诀窍。 我希望这有助于某人,作为“最后的机会”解决方案。

Andrea answered 2019-09-11T07:01:05Z
1 votes

我试过很多方法,包括这里定义的。我得到的是,

  • 确保存储库的名称有效。 最好的方法是从存储库站点复制链接并粘贴到git bash中。

  • 确保已提交所选文件。

    git push -u -f origin master
  • 如果两个步骤都不起作用,请尝试

    git push -u -f origin master

Developer Here answered 2019-09-11T07:02:01Z
0 votes

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

git init

然后,您可以提交并推送更新到master

Nadir Hajiyev answered 2019-09-11T07:02:38Z
0 votes

还要确保你正在推动正确的分支。

Brian answered 2019-09-11T07:03:09Z
0 votes

相反,您可以尝试以下方法。 你不必去master; 您可以直接强制推动分支本身的更改。

如上所述,当您执行rebase时,您将更改分支上的历史记录。 因此,如果您尝试在rebase之后执行正常的git push,Git将拒绝它,因为没有从服务器上的提交到分支上的提交的直接路径。 相反,你需要使用-f--force标志告诉Git是的,你真的知道你在做什么。 在强制推送时,强烈建议您将push.default配置设置设置为simple,这是Git 2.0中的默认设置。 要确保配置正确,请运行:

$ git config --global push.default simple

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

$ git push -f

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

有关详细信息,请转至如何重新启动Pull Request。

JumpMan answered 2019-09-11T07:04:12Z
0 votes

这发生在我身上。 我只是重新提交了更改,然后推了推。

user742102 answered 2019-09-11T07:04:43Z
-6 votes
git push origin master
ivans answered 2019-09-11T07:05:07Z
translate from https://stackoverflow.com:/questions/2936652/git-push-wont-do-anything-everything-up-to-date