首页 文章

即使我有本地更改,git push也会说所有内容都是最新的

提问于
浏览
178

我有一个远程gitosis服务器和一个本地git存储库,每次我对我的代码进行重大更改,我都会将更改推送到该服务器 .

但是今天我发现即使我有一些本地更改并提交到本地存储库,当运行git push origin master时它会说'Everything up-to-date',但是当我使用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

19 回答

  • 3

    我遇到过类似的情况;当我做出改变并尝试 git push origin master 时,它说一切都是最新的 .

    我不得不_1124308_已更改的文件,然后 git push origin master . 它从那时开始工作 .

  • 1

    从您的git状态,您可能与我的情况不同 .

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

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

    这里提供的信息越多,遥控器就会挂断 . 原来它是由于超过http post缓冲区大小 . 解决方案是增加它

    git config http.postBuffer 524288000

  • 215

    你不会有任何机会使用detached head

    如:

    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从当前分支中分离出来并直接指向由当前分支命名的提交 . tag(上例中的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

    呃..如果你是一个git noob,你确定你在 git push 之前有 git commit ?我第一次犯了这个错误!

  • 3

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

    必须明确推送新的本地分支:

    git push origin your-new-branch-name
    

    关于git的其中一个...你克隆一个仓库,做一个分支,提交一些变化,推动......“一切都是最新的” . 我理解为什么会这样,但这个工作流程对新手来说非常不友好 .

  • 2

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

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

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

    所以我习惯性地将主分支推送到共享仓库......这可能是一件很干净的东西,在我看来......

    但我忘记了我一直在努力的变化还没有进入主分支!

    因此,每当我尝试 git push ,我看到"Everything up to date"时,我想要尖叫,但当然,这不是我的意思's fault! It' .

    所以相反,我将我的分支合并到主人,然后做推,然后一切都很开心 .

  • 1

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

    $ 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/

  • 1

    请参阅上面的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不再说“一切都是最新的” - 它停止抱怨“快速前进” .

  • 22
    $ git push origin local_branch:remote_branch
    

    解释

    我有同样的错误,并花了几个小时试图找出它 . 最后我发现了它 . 我不知道的是像这样推动 git push origin branch-x 将尝试在本地搜索branch-x然后推送到远程branch-x .

    就我而言,我有两个远程网址 . 当我尝试从本地推送到x遥控器时,我从 branch-xbranch-y 进行了结账 . 我得到的消息一切都是最新的,这是正常的,因为我正在推送到第二个遥控器的x .

    长话短说不要陷入这种陷阱,你需要指定源ref和目标ref:

    $ git push origin local_branch:remote_branch
    
  • 37

    我今天遇到了这个问题,并没有与任何其他答案有任何关系 . 这是我做了什么以及如何修复它:

    我的一个存储库最近搬了,但我有一个本地副本 . 我分支了我的本地"master"分支并进行了一些更改 - 然后我记得存储库已经移动了 . 我使用 git remote set-url origin https://<my_new_repository_url> 来设置新的URL但是当我按下它时只会说"Everything up to date"而不是将我的新分支推送到master .

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

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

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

  • 109

    我的错误与迄今为止提到的所有内容都不同 . 如果你不知道为什么你会有一个独立的头,那么你可能不会 . 我正在使用 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'
    
  • 2

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

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

  • 1

    确认您没有填写远程URL .

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

  • 6

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

  • 1

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

    首先,我从我的旧本地分支机构(我无法推动)分支出一个新的本地分支机构 . 然后我将新的本地分支推送到原始服务器(Github) . 即

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

    这使得Github上出现了变化,尽管是在新的本地分支而不是旧的本地分支 .

  • 1

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

  • 28

    在我的情况下,我有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 无效!)为我解决了这个问题 .

  • 6

    我遇到过同样的问题 . 在我的情况下,这是由于必须为同一个遥控器的名称 . 它创造了标准的'起源',但我长期以来一直使用'github'作为我的遥控器,所以也就是这样 . 一旦我删除了'origin'遥控器,错误就消失了 .

  • 3

    我发生了这种情况(在我的git日志中提交虽然git说一切都是最新的,但我没有在GitHub上,我相信这个问题是Github . 我没有在git中收到任何错误消息,但是GitHub有状态错误,几小时后我的提交就出现了 .

    https://status.github.com/messages

    GitHub状态消息是:

    • 我们正在调查服务不可用的报告 .

    • 我们正在调查访问GitHub.com的问题 .

    • 我们正在通过数据存储系统进行故障恢复,以恢复对GitHub.com的访问 .

相关问题