即使我有本地更改,git push会将所有内容都更新到最新状态
我有一个远程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 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
选项创build一个临时分支,但是从版本1.5.0开始, 上述命令会将HEAD
从当前分支中分离出来,并直接指向标记所指定的提交 (在上面的例子中是v2.6.18
)。在这种状态下,你可以使用所有的git命令。
例如,你可以使用git reset --hard $othercommit
来进一步移动。
您可以进行更改并在分离的HEAD之上创build一个新的提交 。
你甚至可以通过使用git merge $othercommit
来创build合并。当你的HEAD分离时,你所在的状态不会被任何分支logging(这是很自然的 – 你不在任何分支上)。
这意味着你可以通过切换回现有的分支 (例如git checkout master
) 来放弃你的临时提交和合并,后来的git prune
或者git gc
会把它们垃圾回收。
如果你错误地做了这件事,你可以问一下你所在的HEAD的reflog,例如
$ git log -g -2 HEAD
错误..如果你是一个混帐noob你确定你有git commit
之前git push
? 我第一次犯了这个错误!
另一个需要注意的重要情况是:git的默认状态是你在“master”分支中工作。 而在很多情况下,你只要把它作为你的主要工作分支(尽pipe有些人喜欢做别的事情)。
无论如何,这只是一个分支。 所以我可能遇到的情况是:
我的活动分支实际上不是主分支。 …但我习惯性地执行命令: git push
(和我之前完成git push origin master
,所以它是THAT的一个捷径)。
所以我习惯性地把主分支推到共享库…这可能是一个很好的干净的东西,在我的情况…
但是我忘记了我一直在做的改变还没有在主分支!
所以每次我试试git push
,我看到“一切都是最新的”,我想尖叫,但是当然不是git的错! 这是我的。
所以,我把我的分支合并到主人手中,然后再推动,一切又都开心了。
也许你正在推新的本地分行?
一个新的本地分支必须明确推送:
git push origin your-new-branch-name
只是其中一件有关git的事情…你克隆一个回购,做一个分支,做一些改变,推…“一切都是最新的”。 我明白为什么会这样,但是这个工作stream程对于新手来说是非常不友善的。
我的问题是,我的本地分支有一个不同于远程分支的名称。 我能够推动以下几点:
$ 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/ )
请参阅上面的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
,它说: “错误:未能推送一些refs。为了防止你失去历史,非快进更新被拒绝,合并远程更改(例如'git拉“),然后再次推。
所以我做了'git pull remoterepo master',发现有冲突。 我再次做了git reset --hard <commit-id>
,将冲突的文件复制到备份文件夹中,再次git pull remoterepo master
,将冲突的文件复制回我的项目,做了git commit
,然后git push remoterepo master
,这次它工作。
Git停止说“一切都是最新的”,并且停止抱怨“快进”。
我今天遇到了这个问题,与其他答案没有任何关系。 以下是我所做的以及我如何解决这个问题:
我的一个仓库最近搬了,但我有一个本地副本。 我从当地的“主”分支分支出来,做了一些修改 – 然后我想起了这个仓库已经移动了。 我使用git remote set-url origin https://<my_new_repository_url>
来设置新的URL,但是当我推送它时,只会说“一切都是最新的”,而不是把我的新分支推到主。
我最终通过重新绑定到origin/master
,然后用明确的分支名称来解决这个问题,如下所示:
$ git rebase <my_branch> origin/master $ git push origin <my_branch>
我希望这可以帮助那些有同样问题的人!
我也遇到类似的情况, 当我做出改变,并试图git push origin master
,这是说一切都是最新的。
我不得不git add
更改的文件,然后git push origin master
。 它从此开始工作。
从你的git身份来看,你可能与我的情况有所不同。
但无论如何,这里是发生在我身上..我遇到了以下错误:
fatal: The remote end hung up unexpectedly Everything up-to-date
这里更多的信息是遥控器挂了。 原来是因为超过了http post buffer的大小。 解决办法是增加它
git config http.postBuffer 524288000
确认您没有盗用您的远程URL。
我只是想提一下,在将Git作为本地Jenkins构buildconfiguration中的CVS后,我遇到了这个问题。 Jenkins似乎检查了我给出的分支的最近一次提交,并重置了我的远程以对应我给回购的path。 不得不再次签出我的function分支,并修复我的原始远程URL'Git的远程设置url'。 不要把构build工具指向你的工作目录,否则你的时间就不好了。 我的远程被设置为我的工作目录的文件path,所以当我尝试用相同的源和目的地推送更改时,它自然地报告了所有最新的信息。
另一种可能性是,你在.gitignore文件中命名了一个被排除的目录。 所以新的提交不会被推送。 发生在我身上的是我命名一个目录忽略“search”,但这也是我的源代码树中的一个目录。
当我在Github上合并一个分支并在本地继续开发时,我自己遇到了这个问题。 我的解决方法与其他build议的解决方法稍有不同。
首先,我从我的旧地方分支(我不能推)分支出一个新的地方分支。 然后我推新的本地分支到原始服务器(Github)。 即
$ git checkout -b newlocalbranch oldlocalbranch $ git push origin newlocalbranch
这个变化在Github上出现了,尽pipe在新的地方分支而不是旧的地方分支。
在我的情况下,我有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
不工作!)修复了这个问题。
我find了一个快捷的方法。 转到你的.git文件夹,打开HEAD
文件,并改变你回到主控的任何分支。 例如ref: refs/heads/master