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

但是,该表格不会设置developorigin/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 developgit 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.