我是git的新手。我读了一些论文,但有一些疑问。 我读过一些类似的帖子,似乎重复了我的问题,然后尝试提出解决方案。但是,没看,这没有解决我的问题
我有一个远程存储库,我想强制它同步我的本地文件。 我相信遥控器已经过时了。我只有一个分支主管。
当我试图说“您的分支比'origin / master'领先3次提交”时,我遇到了一个问题。我做了
git reset --hard origin/master
并解决了这个问题。
现在,我想强制远程分支主存储库使用本地文件进行更新。
我用过git push origin master -f
。结果是“一切都是最新的”,但是我需要使用本地文件强制更新远程存储库,因为我不确定它是否真的已更新。
Reflog输出:
Luiz@Dell-Sala MINGW64 /c/AppProg/NH (master)
git reflog
5e63abf (HEAD -> master, origin/master) HEAD@{0}: commit: <U+009B>23_02_2019
edc9596 HEAD@{1}: reset: moving to origin/master
1d81b58 HEAD@{2}: commit: <U+009B>22_02_2019
7a4a5cd HEAD@{3}: reset: moving to HEAD
7a4a5cd HEAD@{4}: commit: <U+009B>22_02_2019
f54f851 HEAD@{5}: reset: moving to HEAD
f54f851 HEAD@{6}: commit: tiss 30303
edc9596 HEAD@{7}: commit: novas alteracoes 23_09_2017
07c87c3 HEAD@{8}: commit: commit 14092016
b894041 HEAD@{9}: commit: mudancas em 05092016
555bdae HEAD@{10}: commit: mudancas em 29082016v1
028d122 HEAD@{11}: commit: mudancas em 29082016
c118805 HEAD@{12}: commit: mudanças em 10_08_2016
e34cf58 HEAD@{13}: commit (initial): #1 - Codigo inicial postado
Luiz@Dell-Sala MINGW64 /c/AppProg/NH (master)
答案 0 :(得分:1)
当我试图说“您的分支比'origin / master'领先3次提交”时,我遇到了一个问题。
那不是一个“问题”;这是git(通常为git status
)的正常输出,告诉您您有本地更改,可以将其同步到远程设备。此时,如果要使用本地更改来更新遥控器,则正确的步骤是
git push
如果这产生了一条错误消息,那么我们需要查看该消息以进一步建议。
我做了git reset --hard origin / master,它解决了这个问题。
您告诉git在此处执行的操作是将当前本地分支(master
)与远程分支同步-删除所有本地更改。正是因为这意味着不再有任何可推动的内容,这消除了“分支即将到来”的消息。
从注释中建议您使用reflog,并添加了reflog输出。现在,该输出向您显示的是HEAD
引用每次移动的历史记录。通常,这是由于诸如提交,签出或在这种情况下为重置之类的事情造成的。所以这行
edc9596 HEAD@{1}: reset: moving to origin/master
特别显示当您重置本地master
以匹配远程跟踪引用origin/master
时,您可能想要做的是将本地master
返回到此之前的状态< / p>
但是,使事情变得复杂的是,您在执行此操作之后又进行了一次提交,显示为
5e63abf (HEAD -> master, origin/master) HEAD@{0}: commit: <U+009B>23_02_2019
在继续之前,我想强调-以下命令基于上述reflog输出。如果您此后进行了任何操作(例如更多的提交,签出等),那么都会添加到reflog中,那么您需要重新运行git reflog
并相应地调整使用的命令。
具体地说,我将参考HEAD@2
;这是因为在reflog输出中,HEAD@1
指的是reset
的结果,所以您想使一个状态再往后移-并且HEAD@2
是之前的状态HEAD@1
。
所以:
如果重置后所做的提交代表需要保留的新更改,那么您会说
git branch temp
git reset --hard HEAD@{2}
git rebase --onto master origin/master temp
git checkout master
git merge --ff-only temp
git branch -d temp
如果不需要提交-如果只是尝试还原一些其他本地更改或其他内容-那么您只需要
git reset --hard HEAD@{2}