Git push不会做任何事情(所有最新信息)


100

我正在尝试更新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)

Answers:


142

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)

问:但是我可以继续使用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'

如果要develop在远程上创建一个分支,请与分开master,然后为提供参数git push:

git push origin develop

那将:在远程上创建一个新分支,称为develop; 并把该分支最新的与您当地的develop分公司; 并集develop推向origin/develop这样,未来,git push没有参数会推develop自动。

如果要将本地推develop送到名为以外的其他名称 的远程分支develop,则可以说:

git push origin develop:something-else

但是,该表格不会设置develop为origin/something-else将来一直使用。这是一次操作。


非常感谢,您的git push起源得到了发展:否则,我已经有一段时间无法回答问题了。
— Antroid

1
在我的情况下git push origin x,仍然没有设置分支X以备将来使用。这是由于部分中的特定pushspec .gitconfig [remote "origin"]导致git的行为。
— 拉曼

27

当我的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。



13

请尝试进入最后一次提交,然后再执行git push origin HEAD:master。


1
这确实有效。您想解释一下它为什么起作用吗?
— 勒内Nyffenegger

文字上来自文档:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
— uruapanmexicansong

也为我工作
— Jerad Rutnam

我比较了我的仓库配置和所有分支看起来都一样。然而,在一个分支我不能简单地使用git push:/这为我工作,以及:git push origin HEAD:my_branch_name。
— iaforek

6

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

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

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


4

现在,它出现在开发分支中。您的原籍是否有开发分支?如果不是,请尝试git push origin develop。git push一旦知道您的起源上的发展分支将可以工作。

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


3

具体来说,如果要合并某些内容以掌握,可以按照以下步骤操作。

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

2

感谢山姆·斯托克斯。根据他的回答,您可以用不同的方式解决问题(我用这种方式)。更新开发目录后,应重新初始化

git init

然后,您可以提交更新并将其推送到主服务器


1
谢谢!就我而言,键入:git init并打开一个新的命令选项卡,键入:git push origin branch_name
— s7ven

2

当我进入GitHub ^C的中间时,这发生在我身上git push。但是,GitHub没有显示已进行更改。

要解决此问题,我对工作树进行了更改,然后提交并再次推送。它工作得很好。


2

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


2

我尝试了许多方法,包括此处定义的方法。我得到的是

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

  • 确保已提交所选文件。

    git commit -m "Your commit here"
    
  • 如果两个步骤都不起作用,请尝试

    git push -u -f origin master


1

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

如上文所述,进行基准时,您正在更改分支的历史记录。结果,如果您尝试git push在重新设置基准之后执行正常操作,则Git将拒绝该正常操作,因为从服务器上的提交到分支上的提交没有直接路径。相反,您需要使用-f或--force标志来告知Git,是的,您确实知道您在做什么。强制推入时,强烈建议您将push.default配置设置设为简单,这是Git 2.0中的默认设置。为确保您的配置正确,请运行:

$ git config --global push.default simple

正确后,您可以运行:

$ git push -f

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

有关更多详细信息,请转到如何为拉取请求重新设置基础。



0

一旦我尝试从一个新的分支中推送出去,我就使用了它git push origin master。您应该:

  • 使用:git push origin your_new_branch如果您希望该分支也出现在远程仓库中。
  • 否则检出到您的master分支,合并内容,然后使用将其从master推送到git repo git merge origin master。

回顾:这里的重点是您应该检查出git merge 的第二个参数的位置。因此,如果您在master中,则将master用作第二个参数;如果您在new_branch中,则将其用作第二个参数,如果您想将此分支保留在远程仓库中,请选择上面的第二个选项。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.