【问题标题】:git push says "everything up-to-date" even though I have local changesgit push 说“一切都是最新的”,即使我有本地更改
【发布时间】:2010-11-03 05:58:54
【问题描述】:

我有一个远程 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 响应..
  • 在我的情况下,我在commit 时遇到错误,我没有注意到并尝试推送代码
  • 忘记提交了?
  • 我不知道这是怎么发生的,但是重置提交 (git reset)、关闭我的控制台窗口并从我开始的地方返回帮助了我

标签: git gitosis


【解决方案1】:

您是否正在与detached head 合作?

如:

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

警告:以下是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 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 prunegit gc 将垃圾收集它们。
如果您错误地执行了此操作,您可以向 reflog 询问您所在的 HEAD,例如

$ git log -g -2 HEAD

【讨论】:

  • 我并不完全清楚我是如何进入这种状态的(目前正在使用 git-svn 进行一些操作),但这足以让我回到正确的位置。谢谢。
  • 我处于分离的头部状态,合并了我的更改,提交了我的更改,现在我想将其推送给 Master,但不能 - 告诉我“一切都是最新的”。但我正在按照我的 Gitlab 提供的说明进行操作:Step 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" 我很好,直到最后一步。但现在我只是对如何前进感到困惑。
  • @John 您需要在分支中才能推送。只要您处于分离的 HEAD 模式,那将无法正常工作。将您的分支重置为您所在的位置:git branch -f myBranch HEAD,然后签出该分支并推送它。在您的情况下,如果您正在合并 nodeAPImyBranch 可能是 master
  • 请注意运行此命令后丢失所有本地更改!考虑在做这样的事情之前做一些 git stash 和代码备份。
  • @kta 好点:我已经编辑了答案以使该警告可见。
【解决方案2】:

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

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

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

所以我习惯性地将 master 分支推送到共享 repo ......这可能是一个很好的干净的东西,在我的情况下......

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

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

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

【讨论】:

  • 我也想尖叫,但是你宣讲了救赎之路,将布兰特合并为大师,然后git push
【解决方案3】:

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

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

【讨论】:

  • 在推送之前你不需要git commit那个添加的文件吗?
【解决方案4】:

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

【讨论】:

  • 在我的情况下是git commit -a -m "your message goes here"
  • 我喜欢(讽刺)每次我想向 github 添加一个新项目时,我有时会忘记并且错误消息让我认为我做错了什么 - 当然是 DUH!仅当我创建了新的备份存储库并且我忘记了时才会发生在我身上
  • 这里是 git noob - 我忘记在我推送之前每次该死的时间都提交 - 如果你之前没有做过推送应该自动提交
  • @FoxMcCloud 提交是需要注意的重要一步,如果你还没有,我相信你会学会爱上它 :) ~ git add -A, git diff --staged, 滚动浏览更改嗯,看起来很不错,git commit -m 'bam!'git push
  • 这里...再次...¯_(ツ)_/¯
【解决方案5】:

请参阅上面 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 &lt;commit-id&gt;,将冲突文件复制到备份文件夹,再次执行git pull remoterepo master,将冲突文件复制回我的项目,执行git commit,然后执行git push remoterepo master,这次成功了。

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

【讨论】:

    【解决方案6】:

    从你的 git 状态来看,你可能和我的情况不同。

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

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

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

    git config http.postBuffer 524288000

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        【解决方案8】:

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

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

        git push origin your-new-branch-name
        

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

        【讨论】:

        • 谢谢!这通过我拥有的新分支解决了我的问题“一切都是最新的”
        • “你的新分支名称”到底是什么意思? Ps:你对新人的看法是正确的。
        • @user1863152 这是您创建的新本地分支的名称。听起来你没有这样做,所以在这里查看其他答案。
        • 完全同意“这个工作流程对新手非常不友好”。自 1 小时以来,我一直在为此苦苦挣扎。我设置了远程和本地仓库。对本地 REAME 文件进行了更改并尝试将其推送到远程,远程没有任何更改。
        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

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

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

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

          【讨论】:

            【解决方案11】:

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

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

            【讨论】:

              【解决方案12】:

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

              【讨论】:

              • 实际上将其设置为refs/heads/master 破坏了我的存储库。但是将其设置为我认为的 HEAD 提交会给出以下消息:Warning: you are leaving 1 commit behind, not connected to any of your branches。我能够将提交转移到一个新分支并将其合并回主分支。
              【解决方案13】:

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

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

              我最终通过重新定位到 origin/master 并使用明确的分支名称推送来解决它,如下所示:

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

              希望对遇到我同样问题的人有所帮助!

              【讨论】:

                【解决方案14】:

                就我而言,我有 2 个远程仓库。

                git remote -v
                originhttps https://asim_kt@...
                originhttps https://asim_kt@...
                origin  ssh:git@bitbucket.org:...
                origin  ssh:git@bitbucket.org:...
                

                两个 repo 都是一样的。只有一个是https,另一个是ssh。所以删除不需要的,(在我的情况下是ssh。因为我使用了https,因为ssh 不起作用!)为我解决了这个问题。

                【讨论】:

                  【解决方案15】:
                  $ 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
                  

                  【讨论】:

                  • 'git push upstream dev:master' 这意味着它将源从 dev 推送到 master。对吗?
                  • 这对我有帮助,我有另一个名为远程分支的本地分支,这引起了混乱。
                  • 好的,这绝对对我有用,但每次我想将某些东西推送到遥控器时,我都必须这样做。如何一劳永逸地解决它?
                  • 您可能需要在本地和远程分支之间设置上游: $ git push --set-upstream origin local_branch:remote_branch
                  【解决方案16】:

                  我的错误与到目前为止提到的所有内容都不同。如果您不知道为什么会有一个分离的头,那么您可能不知道。我正在使用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'
                  

                  【讨论】:

                    【解决方案17】:

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

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

                    【讨论】:

                    • 这对我来说也是个问题。最终重命名了 .git 文件夹中大小写不正确的文件夹(logs/refs/heads、refs/heads)。
                    【解决方案18】:

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

                    【讨论】:

                      【解决方案19】:

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

                      git commit 'My message'
                      

                      而不是正确的:

                      git commit -m 'My message'
                      

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

                      【讨论】:

                      • 我不明白为什么我会犯这样一个简单的错误,需要stackoverflow来找到解决方法。只是提醒自己以后,一定要“git status”检查你是否已经提交了。
                      【解决方案20】:

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

                      现在来了:

                      $ 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

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

                      【讨论】:

                        【解决方案21】:

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

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

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

                        【讨论】:

                          【解决方案22】:

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

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

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

                          我使用https://stackoverflow.com/questions/37807308/[][1] 技术减小了每个文件的文件大小。

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

                          【讨论】:

                            【解决方案23】:

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

                            git push origin master

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

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

                            1. git add .
                            2. git commit -m "Bug Fixed"
                            3. git push -u origin master

                            【讨论】:

                              【解决方案24】:

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

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

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

                              git push origin master

                              【讨论】:

                                【解决方案25】:

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

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

                                使用git remote -v 显示了我的遥控器列表及其网址,我发现了问题所在。

                                将失败的遥控器重置为正确的 URL 可解决问题:
                                git remote set-url &lt;remote-name&gt; &lt;correct-url&gt;

                                【讨论】:

                                  【解决方案26】:

                                  我曾经在一个特性分支上,而我的同事也创建了他自己的特性分支。我跑了git fetch -a,然后跑了git push origin &lt;coworkers_branch&gt;。这一直告诉我一切都是最新的。

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

                                  我真诚地希望这对某人有所帮助,因为我花费的时间比我应该花的时间多得多。

                                  【讨论】:

                                    【解决方案27】:
                                    git branch -M <desired branch>
                                    

                                    这对我有用。

                                    【讨论】:

                                      猜你喜欢
                                      • 2011-06-17
                                      • 1970-01-01
                                      • 2012-02-15
                                      • 1970-01-01
                                      • 2014-03-23
                                      • 2018-10-06
                                      • 2015-11-14
                                      • 2019-08-01
                                      • 2010-11-26
                                      相关资源
                                      最近更新 更多