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

时间:2019-02-23 12:46:39

标签: git bitbucket

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

1 个答案:

答案 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}