我有一个远程gitosis服务器和一个本地git存储库,每次我对我的代码进行重大更改,我都会将更改推送到该服务器.
但是今天我发现即使我有一些本地更改并提交到本地存储库,当运行git push origin master时它会说"Everything up-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
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 243
你不会有任何机会与一个超然的头?
如:
表明您的最新提交不是分支负责人.
$ 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>
Run Code Online (Sandbox Code Playgroud)
如git checkout
手册页中所述(强调我的):
有时候能够签出一个不在你的某个分支顶端的提交是有用的.
最明显的例子是在标记的官方发布点检查提交,如下所示:
$ git checkout v2.6.18
Run Code Online (Sandbox Code Playgroud)
早期版本的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
垃圾收集来丢弃您的临时提交和合并.
如果你错误地这样做了,你可以向HEAD询问reflog,例如
$ git log -g -2 HEAD
Run Code Online (Sandbox Code Playgroud)
Laz*_*Laz 128
呃..如果你是一个git noob,你确定你git commit
以前有过git push
吗?我第一次犯了这个错误!
Rom*_*kov 51
也许你正在推动一个新的本地分支机构?
必须明确推送新的本地分支:
git push origin your-new-branch-name
Run Code Online (Sandbox Code Playgroud)
关于git的其中一个...你克隆一个仓库,做一个分支,提交一些变化,推动......"一切都是最新的".我理解为什么会这样,但这个工作流程对新手来说非常不友好.
cam*_*den 34
我的问题是我的本地分支的名称与远程分支的名称不同.我能够通过执行以下操作来推动:
$ 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/)
小智 28
需要注意的另一个重要情况是:git的默认状态是你在"master"分支中工作.在很多情况下,你只是作为你的主要工作分支(尽管有些人喜欢并做其他事情).
无论如何,那只是一个分支.所以我可能会遇到的情况是:
我的活动分支实际上不是主分支....但我习惯性地执行命令:( git push
我以前做过git push origin master
,所以这是一个快捷方式).
所以我习惯性地将主分支推送到共享仓库......这可能是一件很干净的东西,在我看来......
但我忘记了我一直在努力的变化还没有进入主分支!
因此,每当我尝试git push
,我看到"一切都是最新的",我想尖叫,但当然,这不是git的错!这是我的.
所以相反,我将我的分支合并到主人,然后做推,然后一切都很开心.
小智 14
我遇到了同样的问题。因为我没有对暂存区添加更改。我直接尝试使用命令将代码推送到远程仓库:
git push origin master
它显示了消息Everything up-to-date
。
要解决此问题,请尝试以下步骤
git add .
git commit -m "Bug Fixed"
git push -u origin master
Mel*_*hia 13
$ git push origin local_branch:remote_branch
Run Code Online (Sandbox Code Playgroud)
我有同样的错误,并花了几个小时试图找出它.最后我发现了它.我不知道的是,像这样推送git push origin branch-x
将尝试在本地搜索branch-x然后推送到远程branch-x.
就我而言,我有两个远程网址.当我尝试从本地y推送到x遥控器时,我做了一个从branch-x到branch-y的结帐.我得到的消息一切都是最新的,这是正常的,因为我正在推送到第二个遥控器的x.
长话短说不要陷入这种陷阱,你需要指定源ref和目标ref:
$ git push origin local_branch:remote_branch
Run Code Online (Sandbox Code Playgroud)
请参阅上面的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>
Run Code Online (Sandbox Code Playgroud)
我这样做了,但是当我尝试时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不再说"一切都是最新的" - 它停止抱怨"快速前进".