即使我进行了本地更改,git push也会说“所有最新信息”


238

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


值得再次检查您是否在正确的目录中!Esp。当你有子模块,你可以从父误混帐响应..
geotheory

就我而言,我遇到了错误,commit但我没有注意到,并尝试推送代码
Zohab Ali,

3
忘记提交了?
ldgorman

Answers:


256

您是否正在与一个独立的头一起工作?

如:

分离头

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

警告:以下操作会git reset --hardgit 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 prunegit gc将其垃圾回收。
如果您错误地执行了此操作,则可以向reflog询问您所在的HEAD,例如

$ git log -g -2 HEAD

4
对我来说,目前还不是很清楚我是如何进入这种状态的(目前正在用git-svn进行处理),但这足以使我回到正确的位置。谢谢。
Christopher Schmidt

我处于独立状态,合并了我的更改,提交了我的更改,现在我想将其推送给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,然后检出所述分支,然后将其推入。就您而言,myBranch可能是master您正在合并中nodeAPI
VonC

请小心运行此命令后丢失所有本地更改!!在执行此类操作之前,请考虑进行一些git stash和代码备份。
kta

@kta好点:我已经编辑了答案以使该警告可见。
VonC

152

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


10
git commit -a -m "your message goes here"我而言
aexl

每当我想将新项目添加到github时,我都会爱我(讽刺),有时我会忘记,错误消息使我认为我做错了什么-当然,DUH!提交仅在我创建新的备份存储库时发生,而我忘记了
Tom Stickel

git noob在这里-我忘了在推之前执行所有该死的时间-如果您之前没有执行过推,则推应该自动提交
FoxMcCloud

2
@FoxMcCloud Commiting是有意识的一个重要步骤,我相信你会学会喜欢它,如果你还没有:)〜 ,,git add -A 通过改变滚动嗯,很好找,,git diff --stagedgit commit -m 'bam!'git push
AFOC

58

也许您正在推动新的本地分支机构?

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

git push origin your-new-branch-name

关于git的事情之一...克隆仓库,创建分支,进行一些更改,然后推...“一切都是最新的”。我知道为什么会发生这种情况,但是这个工作流程对新手来说非常不友好。


3
谢谢!这解决了我新开的一家分支机构“所有问题”的问题
盘古,

“您的新分支名称”到底是什么意思?附:您对新来者是正确的。
www-0av-Com

@ user1863152是您创建的新本地分支的名称。听起来您没有这样做,所以请在此处查看其他答案。
罗曼·斯塔科夫

完全同意“此工作流程对新来者极为不友好”。自1个小时以来,我一直在为此奋斗。我设置了远程和本地仓库。对本地REAME文件进行了更改,然后尝试将其推送到远程,而远程中没有任何更改。
Vir19年


28

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

无论如何,那只是一个分支。因此,我可能会遇到的情况是:

我的活动分支实际上不是master分支。...但是我习惯性地执行以下命令:(git push而且我以前已经做过git push origin master,所以这是THAT的快捷方式)。

所以我习惯性地将master分支推送到共享仓库...对于我来说这可能是一件好事...

但是我忘记了我正在进行的更改尚未在master分支中!

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

因此,我将分支合并到master,然后进行推送,一切再次变得快乐。


我也想尖叫,但是随后,您宣讲了救赎的道路,将布兰特合并为主人,然后git push
亚伦C

16
$ git push origin local_branch:remote_branch

说明

我有同样的错误,花了数小时试图找出答案。终于我找到了。我不知道的是,像这样的推送git push origin branch-x将尝试在本地搜索branch-x,然后推送到远程branch-x。

就我而言,我有两个远程URL。尝试从y本地推送到x远程服务器时,我从branch-xbranch-y进行了结帐。

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

$ 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上游dev:master'这意味着它将把源代码从dev推送到master。对?
Dhaduk Mitesh

这帮助了我,我有了另一个名为远程分支的本地分支,这引起了混乱。
休伯特·库比亚克

好的,这绝对对我有用,但是每次我想向遥控器推送东西时,我都必须这样做。如何一劳永逸地修复它?
SamuraiJack

您可能需要使用以下命令在本地和远程分支之间设置上游:$ git push --set-upstream origin local_branch:remote_branch
Melchia

6

请参阅上方的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停止说“一切都是最新的”-并停止抱怨“快进”。



3

从您的git状态,您可能与我的情况有所不同。

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

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

这里更有用的消息是远程挂断了。原来是由于超出了http post缓冲区大小。解决的办法是增加

git config http.postBuffer 524288000


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>

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


3

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

解决方案是从packed-refs中手动删除相关行。找不到更干净的解决方案。


这对我来说也是一个问题。最后在.git文件夹(日志/ refs / heads,refs / heads)中重命名了大小写不正确的文件夹。
阿列克谢·索洛奈特

2

当我合并Github上的一个分支并继续在本地发展时,我遇到了这个问题。我的解决方案与建议的其他解决方案略有不同。

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

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

尽管在newlocalbranch中,而不是在oldlocalbranch中,但更改已显示在Github上。


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它不起作用!)为我解决了这个问题。


2

我的错误与迄今为止提到的一切都不一样。如果您不知道为什么会有偏头,那么您可能没有。我正在使用git commit和进行自动驾驶git 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

我也遇到过同样的问题。由于我没有对登台区域进行更改。我直接尝试使用命令将代码推送到远程仓库:

git push origin master

并且显示消息Everything up-to-date

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

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

1

确认您没有篡改远程URL。

我还想提到在本地Jenkins构建配置中将Git作为CVS启用后遇到的问题。看来,詹金斯(Jenkins)签出了我给它的分支的最新提交,并且还重置了我的遥控器以与我给它回购的路径相对应。必须再次签出我的功能分支,并使用“ git remote set-url”修复我的原始远程URL。不要将构建工具指向您的工作目录,否则会很麻烦。我的遥控器设置为工作目录的文件路径,因此当我尝试使用相同的源和目标推送更改时,它自然会报告所有最新信息。


1

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


1

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


实际上将其设置为refs/heads/master破坏我的存储库。但是将其设置为我认为是HEAD commit的结果是:Warning: you are leaving 1 commit behind, not connected to any of your branches。我能够将提交移到新的分支并将其合并回主服务器。
schmijos

1

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


1

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

https://status.github.com/messages

GitHub状态消息为:

  • 我们正在调查服务不可用的报告。
  • 我们正在调查访问GitHub.com的问题。
  • 我们正在对数据存储系统进行故障转移,以恢复对GitHub.com的访问。

1

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

git commit 'My message'

而不是正确的:

git commit -m 'My message'

注意:它不会引发任何错误!但你不能把你的提交和总是Everything up to date代替


0

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

现在来了:

$ 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

(希望你们尽快摆脱困境)


0

我知道它已经很旧了,但就我而言,我很快就修复了它。

我在提前提交时遇到了同样的错误master。然后我找到了当前的Stack Overflow帖子。但是,在继续提出建议的想法之前,我只是决定进行一次新提交,然后再次尝试按原产地进行,因此工作顺利。

我不知道为什么,但是也许对其他人有用。


它实际上并没有提供问题的答案。一旦你获得足够的信誉,您将获得的权限给予好评的答案你喜欢。这样,未来的问题访问者将对该答案有更高的投票率,并且回答者还将获得声誉得分。请参阅为什么投票很重要
Waqar UlHaq

1
好的,谢谢您的澄清。但是,为什么不能(如果需要)将其视为该问题的“替代方法”呢?虽然这不是解决方案,但无论如何对其他人还是有用的。
思科

0

另一种可能性是您的提交不会影响您要推送的目录。所以我的情况是

- .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


0

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

我是不是能够解决以上通过,因为我既没有一所提供的解决方案,分离的头也没有我有不同的名称,我的本地远程回购。

但是我的确是我的文件大小略大于1MB,最大文件大小约为2MB。我使用如何减小iPython笔记本的文件大小来减小文件大小?技术。它通过清除输出帮助减小了文件大小。从此以后,我就可以推送代码了,因为它带来了我的文件大小(以KB为单位)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.