繁体   English   中英

Git-如何强制从本地远程同步

[英]Git - how to force sync remote from local

我是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)

当我试图说“您的分支比'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移回到之前的状态

复杂的事情,但是,您在执行此操作之后又进行了一次提交,如下所示

5e63abf (HEAD -> master, origin/master) HEAD@{0}: commit: <U+009B>23_02_2019

在继续之前,我想强调一下-以下命令基于上述reflog输出。 如果从那时起您已经做过任何事情,那都会增加reflog-例如更多的提交,签出等-那么您需要重新运行git reflog并相应地调整您使用的命令。

具体来说,我将参考HEAD@2 这是因为在reflog输出中HEAD@1指的是reset的结果,因此您想返回一个状态 ,而HEAD@2HEAD@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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM