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

时间:2010-05-29 21:27:42

标签: git dvcs

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

20 个答案:

答案 0 :(得分:131)

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;这是一次性操作。

答案 1 :(得分:22)

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

之类的正确分支

答案 2 :(得分:14)

尝试:

git push --all origin

答案 3 :(得分:8)

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

答案 4 :(得分:4)

现在,看起来你正处于开发分支。你有自己的发展分支吗?如果没有,请尝试git push origin developgit push一旦知道你的起源分支就会有效。

进一步阅读时,我会看一下git-push man pages,特别是示例部分。

答案 5 :(得分: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

答案 6 :(得分:2)

^C位于git push到GitHub的中间时,发生了这种情况。然而,GitHub没有表明已经做出了改变。

要修复它,我对我的工作树进行了更改,已提交,然后再次推送。它工作得非常好。

答案 7 :(得分:2)

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

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

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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

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

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

  • 确保已提交选定的文件。

     imgfx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    effectsPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    effectsPlayer.setDataSource(getFilesDir()+"/effects/"+fxname);
                    effectsPlayer.prepare();
                    effectsPlayer.start();
    
                    if(effectsPlayer.isPlaying()){
                        audioplayer.pause();
                        audioplayer.release();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    
        audio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
    
                    audioplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    audioplayer.setDataSource(getFilesDir()+"/audio/"+audname);
                    audioplayer.prepare();
                    audioplayer.start();
    
                    if(audioplayer.isPlaying()){
                        effectsPlayer.pause();
                        effectsPlayer.release();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    @Override
    public void onBackPressed(){
        if(effectsPlayer != null){
            effectsPlayer.stop();
        }
    }
    
  • 如果两个步骤都不起作用,请尝试

    git commit -m "Your commit here"

答案 10 :(得分:0)

当您处于与您想象的不同的分支中时,可能会发生这种情况,我们称之为“附加”。您需要在本地返回 main 并从那里推送。但是要小心,当您返回 main 时,您所做的所有更改都将被撤消,并且您只会看到代码,直到您本地 main 的最后一次编辑为止。

答案 11 :(得分:0)

您确定设置了正确的远程源 url 吗?通过发出 git remote show origin 是否根据您的存储库 URL 正确设置了“获取 URL”和“推送 URL”?

那是我的错误,我手动输入的,它不是正确的路径。

答案 12 :(得分:0)

问题也可能是本地分支没有上游。

使用:

git push --set-upstream origin main

您正在设置要将文件推送到哪个分支。

答案 13 :(得分:0)

就我而言,我必须删除所有遥控器(出于某些无法解释的原因有多个遥控器),再次添加遥控器,然后使用-f进行提交。

$ git remote
origin
upstream

$ git remote remove upstream
$ git remote remove origin
$ git remote add origin <my origin>
$ git push -u -f origin main

我不知道-u标志是否有所贡献,但也没有任何伤害。

答案 14 :(得分:0)

在我尝试从新分支推送时发生了这种情况,而我改用了git push origin master。 您应该:

  • 使用:git push origin your_new_branch(如果需要) 分支也出现在远程仓库中。
  • 否则,请检查到您的master分支并合并内容,然后使用git merge origin master从master推送到git repo。
  

回顾:这里的重点是您应该查看提供的服务   git合并的第二个参数。因此,如果您是主要使用者   如果您在new_branch中,则将master作为第二个参数使用   如果要将此分支保留在远程中,则将其作为第二个参数   否则,请选择上面的第二个选项。

答案 15 :(得分:0)

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

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

$ git config --global push.default simple

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

$ git push -f

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

转到 How to Rebase a Pull Request 的底部以获取更多详细信息。

答案 16 :(得分:0)

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

git init

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

答案 17 :(得分:0)

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

答案 18 :(得分:-1)

尝试用git add -A代替git add .

答案 19 :(得分:-6)

git push origin master