我有一个远程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的默认状态是您正在“master”分支中工作。在很多情况下,您只需要将其作为主要的工作分支(尽管有些人会变得花哨并做其他事情)。
不管怎样,这只是一个分支。所以我可能会遇到这样的情况:
我的活动分支实际上不是主分支. ...但我习惯执行命令:git push(我之前已经做过git push origin master,所以这是一个快捷方式)。
所以我习惯性地将主分支推到共享回购…对我来说,这可能是一件干净的好事……
但是我已经忘记了我一直在做的改变还没有在主分支!!
因此,每次我尝试git push,当我看到“Everything up to date”时,我都想尖叫,但当然,这不是git的错!它是我的。
因此,我将我的分支合并到master中,然后执行push,一切都恢复正常。
见上面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>
我这么做了,但是当我尝试着去推remoterepo master时,它说
"错误:未能推动一些参考。为了防止您丢失历史记录,非快进更新被拒绝,合并远程更改(例如。'git pull'),然后再推。”
所以我做了'git拉remoterepo master',它发现了一个冲突。我再次做了git reset——hard <commit-id>,将冲突文件复制到备份文件夹,git再次拉出remoterepo master,将冲突文件复制回我的项目,git提交,然后git推送remoterepo master,这一次它成功了。
Git不再说“一切都是最新的”,也不再抱怨“快进”。