我有一个远程gitosis服务器和一个本地git存储库,每次我在代码中做大的更改时,我也会将更改推到该服务器。
但是今天我发现,即使我有一些本地更改并提交到本地存储库,当运行git push origin master时,它说“一切都是最新的”,但当我使用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
$ git push origin local_branch:remote_branch
解释
我也犯了同样的错误,花了几个小时试图解决这个问题。最后我找到了。
我不知道的是git push origin branch-x会尝试在本地搜索branch-x然后推送到远程branch-x。
在我的例子中,我有两个远程url。我做了一个从分支-x到分支-y的签出,当我试图从本地的y推到远程的x时,我有一条消息,一切都是最新的,这很正常,因为我正在推到第二个远程的x。
长话短说,为了不落入这种陷阱,你需要指定源ref和目标ref:
$ git push origin local_branch:remote_branch
更新:
如果你每次推送分支都要运行这个命令,你可能需要设置本地和远程分支之间的上游,如下所示:
$ git push --set-upstream origin local_branch:remote_branch
Or
$ git push -u origin local_branch:remote_branch
这里,我的解决方案与上面的不同。我还没有弄清楚这个问题是怎么发生的,但我解决了它。有点出乎意料。
现在来看:
$ 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
(希望你们能尽快走出困境)