我正在尝试更新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)
答案 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 develop
。 git 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
(如果需要)
分支也出现在远程仓库中。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