我有一个远程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 master,它说一切都是最新的。

我必须git添加更改后的文件,然后git push origin master。从那时起,它就开始工作了。

其他回答

另一种可能是,您的提交不会影响您所推送的目录。在我的例子中,我有一个这样的结构

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

我做出了一个修改README的承诺。然后运行git子树push——prefix client heroku-client master,得到消息Everything - updated

我有多个遥控器。除了一个人以外,所有人都正确地推了,所以我知道我没有一个独立的头或提交问题。

结果,我不小心给了两个遥控器相同的URL。复制URL的远程失败,因为我正在推到一个已经被推到的URL !

使用git remote -v显示了我的远程列表和它们的url,在那里我意识到问题。

重置失败的远程到其正确的URL修复了这个问题: Git remote set-url <remote-name> <correct-url>

$ 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添加。或者git add nameoffile #,它将添加项目中现有的文件

Git commit -m "first commit" #提交项目中的所有文件

Git push origin master

另一种可能是您在.gitignore文件中命名了一个被排除的目录。这样新的提交就不会被推送。我碰巧命名了一个目录来忽略“search”,但那也是我源代码树中的一个目录。