296

我有一个远程 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
4

27 回答 27

285

您是否有任何机会与一个分离的头一起工作?

如:

分离头

表明您的最新提交不是分支头。

警告:以下操作:如果要保存当前修改的文件,请git reset --hard确保首先使用。git stash

$ 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手册页中所述(强调我的):

有时能够签出不在您的某个分支顶端的提交很有用。
最明显的例子是在标记的官方发布点检查提交,如下所示:

$ 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垃圾收集。
如果你做错了,你可以向 reflog 询问你所在的 HEAD,例如

$ git log -g -2 HEAD
于 2009-06-16T07:32:54.680 回答
194

Err..如果你是一个 git noob 你确定你git commit以前有git push吗?我第一次犯这个错误!

于 2012-05-19T20:06:01.167 回答
77

也许你正在推动一个新的本地分支?

必须显式推送新的本地分支:

git push origin your-new-branch-name

只是关于 git 的那些事情之一......你克隆一个 repo,创建一个分支,提交一些更改,推送......“一切都是最新的”。我理解为什么会这样,但是这个工作流程对新手非常不友好。

于 2015-03-10T16:32:02.980 回答
60

我的问题是我的本地分支与远程分支的名称不同。我能够通过执行以下操作来推动:

$ git push origin local-branch-name:remote-branch-name

(归功于https://penandpants.com/2013/02/07/git-pushing-to-a-remote-branch-with-a-different-name/

于 2017-04-05T19:24:24.160 回答
31
$ git push origin local_branch:remote_branch

解释

我遇到了同样的错误并花了几个小时试图弄清楚。最后我找到了。我不知道的是,像这样推送git push origin branch-x会尝试在本地搜索分支-x,然后推送到远程分支-x。

就我而言,我有两个远程 URL。当我尝试从 y 本地推送到 x 远程时,我从branch-xbranch-y进行了结帐,我收到消息一切都是最新的,这是正常的,因为我正在推送到第二个远程的 x。

长话短说,为了不落入这种陷阱,您需要指定源引用和目标引用:

$ git push origin local_branch:remote_branch

更新:

如果每次推送分支时都必须运行此命令,则可能需要使用以下内容在本地和远程分支之间设置上游:

$ git push --set-upstream origin local_branch:remote_branch

或者

$ git push -u origin local_branch:remote_branch
于 2018-03-08T15:36:52.377 回答
29

另一种需要注意的重要情况:git 的默认状态是您在“master”分支中工作。在很多情况下,你只是作为你的主要工作分支闲逛(尽管有些人喜欢并做其他事情)。

无论如何,这只是一个分支。所以我可能会遇到的情况是:

我的活动分支实际上不是主分支。...但我习惯性地执行命令:(git push我以前做过git push origin master,所以这是一个捷径)。

所以我习惯性地将主分支推送到共享仓库......在我的情况下,这可能是一件很干净的事情......

但是我忘记了我一直在做的更改还没有在 master 分支中!

所以每次我尝试git push,看到“一切都是最新的”,我想尖叫,但当然,这不是 git 的错!这是我的。

所以相反,我将我的分支合并到 master 中,然后进行推送,一切又恢复了。

于 2011-04-11T19:54:49.723 回答
18

我遇到了同样的问题。因为我没有对暂存区添加更改。我直接尝试使用命令将代码推送到远程仓库:

git push origin master

它显示了消息Everything up-to-date

要解决此问题,请尝试以下步骤

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master
于 2020-05-21T18:53:16.490 回答
7

请参阅上面的 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,这次成功了。

Git 不再说“一切都是最新的”——它不再抱怨“快进”。

于 2013-02-17T00:11:41.250 回答
4

我的另一个非常简单但很愚蠢的错误:我只是忘记-m在我的提交中添加消息修饰符。所以我写道:

git commit 'My message'

而不是正确的:

git commit -m 'My message'

注意:它不会抛出任何错误!Everything up to date但是您将无法推送您的提交并总是得到

于 2019-07-03T16:02:54.427 回答
3

我也遇到过类似的情况;当我进行更改并尝试更改时 git push origin master,它说一切都是最新的。

我不得不git add更改文件,然后git push origin master. 从那时起它开始工作。

于 2011-07-27T13:27:18.450 回答
3

从你的 git status 来看,你的情况可能和我的不一样。

但无论如何,这就是发生在我身上的事情。我遇到了以下错误:

fatal: The remote end hung up unexpectedly
Everything up-to-date

此处信息更丰富的消息是遥控器已挂断。原来这是由于超出了http post缓冲区的大小。解决方案是增加它

git config http.postBuffer 524288000

于 2013-05-04T07:06:52.897 回答
3

我今天遇到了这个问题,它与其他任何答案都没有任何关系。这是我所做的以及我如何修复它:

我的一个存储库最近移动了,但我有一个本地副本。我从本地的“master”分支分支出来并进行了一些更改——然后我记得存储库已经移动了。我曾经git remote set-url origin https://<my_new_repository_url>设置新的 URL,但是当我推送它时,它只会说“一切都是最新的”,而不是将我的新分支推送到 master。

我最终通过重新定位origin/master然后使用显式分支名称推送来解决它,如下所示:

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

我希望这可以帮助任何遇到我同样问题的人!

于 2017-06-02T17:45:25.817 回答
3

超级罕见 - 但仍然:在 Windows 上,可能是packed-refs的分支具有一个字母大小写(即 dev/mybranch),而当 core.ignorecase 设置为 true 时, refs文件夹有另一种大小写(即 Dev/mybranch) .

解决方案是从packed-refs手动删除相关行。没有找到更清洁的解决方案。

于 2018-07-08T14:29:53.070 回答
2

当我在 Github 上合并一个分支并继续在本地开发时,我自己也遇到了这个问题。我的修复与建议的其他修复略有不同。

首先,我从旧的本地分支(我无法推送)分支了一个新的本地分支。然后我将新的本地分支推送到源服务器(Github)。IE

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

这使得更改显示在 Github 上,尽管是在 newlocalbranch 而不是 oldlocalbranch 中。

于 2016-09-24T17:00:08.153 回答
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没有工作!)为我解决了这个问题。

于 2017-08-06T02:59:55.503 回答
1

确认您没有弄错您的远程 URL。

我只想提一下,在本地 Jenkins 构建配置中启用 Git 作为 CVS 后,我遇到了这个问题。詹金斯似乎检查了我给它的分支的最新提交,并重置了我的遥控器以对应于我给它的存储库的路径。不得不再次检查我的功能分支并使用“git remote set-url”修复我的原始远程 url。不要将构建工具指向您的工作目录,否则您将度过一段糟糕的时光。我的遥控器设置为我的工作目录的文件路径,因此当我尝试使用相同的源和目标推送更改时,它自然会报告所有最新的内容。

于 2013-07-19T21:19:26.073 回答
1

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

于 2016-01-13T02:55:36.450 回答
1

我找到了一个快速的方法。转到您的 .git 文件夹,打开HEAD文件并将您所在的任何分支更改回 master。例如参考:refs/heads/master

于 2017-04-27T14:27:17.780 回答
1

我的错误与迄今为止提到的一切都不同。如果你不知道为什么你会有一个分离的头,那么你可能不知道。我正在使用 和 进行自动驾驶仪git commitgit 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'
于 2018-04-26T02:34:48.937 回答
1

我遇到过同样的问题。在我的情况下,这是由于必须为同一个遥控器命名。它创建了标准的“起源”,但我长期以来一直使用“github”作为我的遥控器,所以它也在那里。一旦我删除了“原点”遥控器,错误就消失了。

于 2018-08-10T18:50:37.177 回答
1

在这里,我的解决方案与上述不同。我还没有弄清楚这个问题是如何发生的,但我已经解决了。有点意外。

现在来了:

$ 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

(希望大家尽快摆脱困境)

于 2019-10-14T02:58:20.937 回答
1

我有一种情况,我在一个特性分支上,我的同事也创建了他自己的特性分支。我跑了git fetch -a,然后git push origin <coworkers_branch>。这一直告诉我一切都是最新的。

我通过签出 <coworkers_branch> 然后从我的功能分支中拉出,然后提交并推回 <coworkers_branch> 来修复它。

老实说,我希望这对某人有所帮助,因为我花的时间比我应该花的时间多得多。

于 2021-04-23T12:05:24.030 回答
1
git branch -M <desired branch>

这对我有用。

于 2021-11-09T20:34:48.427 回答
0

另一种可能性是您的提交不会影响您正在推送的目录。所以在我的情况下,我有一个类似的结构

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

我提交了 master modifying README.md,然后运行git subtree push --prefix client heroku-client master并收到消息Everything up-to-date

于 2020-04-29T18:32:28.633 回答
0

当我遇到这个欺骗性错误时,我正在使用Jupyter-Notebook 。

我无法通过上面提供的解决方案解决问题,因为我既没有分离的头也没有本地远程仓库的不同名称

但我所拥有的是我的文件大小略大于1MB,最大的几乎是~2MB

我使用如何减小 iPython 笔记本的文件大小来减小每个文件的文件大小?技术。

它通过清除输出帮助减小了我的文件大小。我能够推送代码,因为它使我的文件大小以 KB 为单位。

于 2020-05-18T15:08:57.193 回答
0

我们需要添加文件并提交已更改/添加的文件执行以下命令

混帐添加。或者 git add nameofile #它将添加项目中的现有文件

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

git push 起源大师

于 2020-06-29T06:34:44.683 回答
0

我有多个遥控器。除了一个之外,所有的推都正确,所以我知道我没有分离的 HEAD 或提交问题。

相反,我不小心给了两个遥控器相同的 URL。具有重复 URL 的远程失败,因为我正在推送到已经推送到的 URL!

使用git remote -v显示了我的遥控器列表及其 URL,在那里我意识到了这个问题。

将失败的遥控器重置为正确的 URL 解决了这个问题:
git remote set-url <remote-name> <correct-url>

于 2020-08-13T17:17:06.143 回答