我有一个远程gitosis服务器和一个本地git存储库,每次我对我的代码进行重大更改时,我都会将更改推送到该服务器。
但今天我发现即使我有一些本地更改并提交到本地存储库,当运行 git push origin master 时它会显示“Everything up-date”,但是当我使用< em> git clone 来检出远程服务器上的文件,它不包含最新的更改。我只有一个名为master的分支和一个名为origin的远程服务器。
PS: 这就是git在运行ls-remote时显示的内容,我不确定它是否有帮助
$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c refs/tags/stage3
答案 0 :(得分:228)
你有可能不会使用detached head吗?
如:
表示您的最新提交不是分支负责人。
$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
正如git checkout
man page(强调我的)所述:
能够签出不在某个分支机构顶端的提交有时很有用。
最明显的例子是在标记的官方发布点检查提交,如下所示:
$ git checkout v2.6.18
早期版本的git不允许这样做,并要求您使用
-b
选项创建临时分支,但从版本1.5.0开始,以上命令会将您的HEAD
与当前分支并直接指向由标记(上例中的v2.6.18
)命名的提交。在此状态下,您可以使用所有git命令 例如,您可以使用
git reset --hard $othercommit
进一步移动 您可以在分离的HEAD 之上进行更改并创建新提交 您甚至可以使用git merge $othercommit
创建合并。你的HEAD分离时所处的状态不会被任何分支记录(这很自然 - 你不在任何分支上)。
这意味着您可以通过切换回现有分支(例如git checkout master
)以及稍后的git prune
或git gc
来放弃您的临时提交和合并会垃圾收集它们 如果你错误地这样做了,你可以向HEAD询问reflog,例如
$ git log -g -2 HEAD
答案 1 :(得分:118)
错误..如果你是git noob,你确定git commit
之前有git push
吗?我第一次犯了这个错误!
答案 2 :(得分:44)
也许你正在推动一个新的本地分支?
必须明确推送新的本地分支:
git push origin your-new-branch-name
关于git的其中一件事......你克隆一个回购,做一个分支,提交一些改变,推动......“一切都是最新的”。我明白为什么会这样,但这个工作流程对新手来说非常不友好。
答案 3 :(得分:30)
我的问题是我的本地分支的名称与远程分支的名称不同。我能够通过以下方式推动:
r = JSON.stringify({ message: e, data: t})
(归功于https://penandpants.com/2013/02/07/git-pushing-to-a-remote-branch-with-a-different-name/)
答案 4 :(得分:28)
另一个需要注意的重要情况:git的默认状态是你在“master”分支中工作。在很多情况下,你只需要作为你的主要工作分支(尽管有些人喜欢并做其他事情)。
无论如何,这只是一个分支。所以我可能会遇到的情况是:
我的活动分支实际上不是主分支。 ......但我习惯性地执行命令:git push
(我以前做过git push origin master
,所以这是THAT的快捷方式。
所以我习惯性地将主分支推送到共享仓库......这可能是一件很干净的东西,在我看来......
但是我忘记了我一直在努力的变化还没有进入主分支!
所以每次我尝试git push
时,我都会看到“一切都是最新的”,我想尖叫,但当然,这不是git的错!这是我的。
所以相反,我把我的分支合并到主人,然后做推,然后一切都很开心。
答案 5 :(得分:10)
$ git push origin local_branch:remote_branch
我有同样的错误&amp;花了好几个小时试图搞清楚。最后我发现了它。
我不知道的是,像这样推git push origin branch-x
会尝试在本地搜索branch-x然后推送到远程branch-x。
就我而言,我有两个远程网址。当我尝试从本地推送到x遥控器时,我从 branch-x 结帐到 branch-y 我收到的消息一切都是最新的,这是正常原因我正在推动第二个遥控器的x。
长话短说不要陷入这种陷阱,你需要指定源ref和目标ref:
$ git push origin local_branch:remote_branch
答案 6 :(得分:6)
见VonC上面的回答 - 我需要一个额外的步骤:
$ git log -1
- note the SHA-1 of latest commit
$ git checkout master
- reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
我这样做了,但是当我尝试git push remoterepo master
时,它说
“错误:未能推送一些引用。为了防止您丢失历史记录,非快进更新被拒绝,在再次推送之前合并远程更改(例如'git pull')。”
所以我做了'git pull remoterepo master',发现了一个冲突。我再次git reset --hard <commit-id>
,将冲突的文件复制到备份文件夹,再次git pull remoterepo master
,将冲突的文件复制回我的项目,git commit
,然后git push remoterepo master
,以及这次它奏效了。
答案 7 :(得分:6)
我遇到了同样的问题。由于我没有对登台区域进行更改。 我直接尝试使用命令将代码推送到远程仓库:
git push origin master
它显示消息Everything up-to-date
。
要解决此问题,请尝试以下步骤
git add .
git commit -m "Bug Fixed"
git push -u origin master
答案 8 :(得分:3)
从您的git状态来看,您可能与我的情况不同。
但无论如何,这就是发生在我身上的事情..我遇到了以下错误:
fatal: The remote end hung up unexpectedly
Everything up-to-date
这里提供的信息越多,遥控器就会挂断。原来它是由于超过http post缓冲区大小。解决方案是用
增加它 git config http.postBuffer 524288000
答案 9 :(得分:3)
我今天遇到了这个问题,并没有与任何其他答案有任何关系。这就是我所做的以及如何修复它:
我最近移动了一个存储库,但我有一个本地副本。我从我的本地“主”分支分支并进行了一些更改 - 然后我记得存储库已经移动了。我使用git remote set-url origin https://<my_new_repository_url>
来设置新的URL,但是当我推送它时,它只会说“一切都是最新的”,而不是将我的新分支推送到主人。
我最终通过重新定位到origin/master
然后使用显式分支名称来解决它,如下所示:
$ git rebase <my_branch> origin/master
$ git push origin <my_branch>
我希望这可以帮助那些遇到同样问题的人!
答案 10 :(得分:3)
我遇到过类似的情况;当我做出改变并尝试时
git push origin master
,它说一切都是最新的。
我必须git add
更改的文件,然后git push origin master
。它从那时开始起作用。
答案 11 :(得分:2)
当我在Github上合并一个分支并继续在本地开发时,我自己遇到了这个问题。我的修复与已建议的其他修改略有不同。
首先,我从旧的本地分支(我无法推送)分支出一个新的本地分支。然后我将新的本地分支推送到原始服务器(Github)。即。
$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch
这让改变显示在Github上,虽然是在新地方而不是旧地方分支。
答案 12 :(得分:2)
在我的情况下,我有2个远程回购。
git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin ssh:git@bitbucket.org:...
origin ssh:git@bitbucket.org:...
两个回购都是一样的。只有一个是https
其他人ssh
。所以删除不需要的一个,(在我的情况下ssh
。因为我使用https
,因为ssh
没有工作!)为我解决了这个问题。
答案 13 :(得分:2)
我的错误与迄今为止提到的所有内容都不同。如果你不知道为什么你会有一个独立的头,那么你可能不会。我正在使用git commit
和git push
进行自动驾驶,并且没有读取git commit
的输出。事实证明,这是一条错误信息,因为我忘记了-am。
[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa':
Everything up-to-date
通过将-am
放在我通常所做的位置来修正它:
[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
答案 14 :(得分:2)
超级稀有-但仍然:在Windows上, packed-refs 可能有一个带有一个字母大小写的分支(即dev / mybranch),而 refs 文件夹当core.ignorecase设置为true时,还有另一种情况(即Dev / mybranch)。
解决方案是从 packed-refs 中手动删除相关行。找不到更干净的解决方案。
答案 15 :(得分:1)
我遇到了一个情况,我在一个功能分支上,我的同事也创建了他自己的功能分支。我跑了 git fetch -a
然后是 git push origin <coworkers_branch>
。这一直告诉我一切都是最新的。
我通过签入
老实说,我希望这对某人有所帮助,因为我花在这上面的时间比我应该花的时间多得多。
答案 16 :(得分:1)
确认您没有填写远程网址。
我只是想提一下,在本地Jenkins构建配置中启用Git作为CVS后,我遇到了这个问题。似乎Jenkins检查了我给它的分支的最新提交,并且还重置了我的遥控器以对应于我将它提供给回购的路径。不得不再次检查我的功能分支并使用'git remote set-url'修复我的原始远程URL。不要将构建工具指向您的工作目录,否则您将度过难关。我的远程设置为我的工作目录的文件路径,因此当我尝试使用相同的源和目标推送更改时,它自然会报告所有内容。
答案 17 :(得分:1)
遇到此欺骗性错误时,我正在使用 Jupyter-Notebook 。
我无法通过上面提供的解决方案来解决,因为我既没有 头颅 ,也没有 不同的名字我的 本地 和 远程 存储库中的strong> 。
但是我的确是我的文件大小略大于 1MB ,最大文件大小几乎为〜2MB 。
我使用https://stackoverflow.com/questions/37807308/[][1]技术缩小了每个文件的文件大小。
它通过清除输出帮助减小了我的文件大小。从此以后,我就可以推送代码了,因为它使我的文件大小达到了KBs。
答案 18 :(得分:1)
我发生了这种情况(即使git表示一切都是最新的,我的git日志中的提交也没有出现在GitHub上),我相信问题出在Github上。我没有在git中收到任何错误消息,但是GitHub出现状态错误,我的提交在几个小时后就出现了。
https://status.github.com/messages
GitHub状态消息为:
答案 19 :(得分:1)
我有同样的问题。就我而言,这是由于必须为同一遥控器命名。它创建了标准的“起源”,但是很长一段时间以来我一直在使用“ github”作为我的遥控器,所以也在那里。一旦我删除了“原始”遥控器,错误就消失了。
答案 20 :(得分:1)
我发现了一种快捷方式。转到.git文件夹,打开HEAD
文件,然后将您所在的分支更改为master。例如。参考:refs/heads/master
答案 21 :(得分:1)
另一种可能性是您在.gitignore文件中命名了一个被排除的目录。因此,新的提交不会被推送。我碰巧在一个目录中忽略了&#34;搜索&#34;,但这也是我的源代码树中的一个目录。
答案 22 :(得分:0)
我的另一个非常简单但无礼的错误:我只是忘了在提交中添加消息a == 5
修饰符。所以我写道:
var _ = {
waitUntil: function(duringExecution, expression, onCompletion) {
test();
function test(){
console.log(a + ' ' + expression());
if(expression() == true) {
onCompletion();
} else {
duringExecution();
setTimeout(test, 500);
}
}
}
}
a = 0;
_.waitUntil(function() {
a++;
},function(){
return a == 5
}, function() {
console.log('yay');
});
不是正确的:
-m
注意:它不会引发任何错误!但是您将无法推送提交,而总是获得git commit 'My message'
答案 23 :(得分:0)
在这里,我的解决方案与上述不同。我还没有弄清楚这个问题是怎么发生的,但是我已经解决了。有点意外。
现在来了:
$ git push origin use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
(use "git push" to publish your local commits)
......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:use_local_cache_v1
To push to the branch of the same name on the remote, use
git push origin test
$ git push origin HEAD:use_local_cache_v1
Total 0 (delta 0), reused 0 (delta 0)
remote:
最适合我的命令是
$git push origin HEAD:use_local_cache
(希望你们尽快摆脱困境)
答案 24 :(得分:0)
我知道它已经很旧了,但就我而言,我很快就修复了它。
我在master
之前提交了一个错误。然后我找到了当前的Stack Overflow帖子。但是,在继续提出建议的想法之前,我只是决定进行一次新提交,然后尝试重新尝试起源,因此工作顺利。
我不知道为什么,但是也许对其他人有用。
答案 25 :(得分:0)
另一种可能性是您的提交不会影响您要推送的目录。所以在我的情况下,我有一个类似
的结构sub
然后我承诺要熟练修改- .git
- README.md
- client/
- package.json
- example.js
- api/
- requirements.txt
- example.py
,然后运行README.md
并收到消息git subtree push --prefix client heroku-client master
答案 26 :(得分:0)
我们需要添加文件并提交已经更改/添加的文件 执行以下命令
git add。或git add nameoffile #it将在项目中添加现有文件
git commit -m“首次提交”#提交项目中的所有文件
git push origin master
答案 27 :(得分:0)
我有多个遥控器。除了一个人以外,其他所有人都正确地按下了,所以我知道我没有分离的HEAD或提交问题。
相反,我不小心给了两个遥控器相同的URL。具有重复URL的远程服务器失败,因为我要推送到已经推送到的URL!
使用git remote -v
显示了我的遥控器及其URL的列表,在那里我意识到了问题。
将失败的遥控器重置为其正确的URL可解决以下问题:
git remote set-url <remote-name> <correct-url>
答案 28 :(得分:-1)
唯一对我有用的是:-
git push origin your_branch_name