当我将repo重置为上次提交时,为什么必须“推送”?

时间:2012-12-03 13:29:48

标签: git

我一直在跟Git一直很快(到目前为止对它非常满意),但我仍然对一些事情感到困惑。我在Mac上使用SourceTree。

特别是,我的团队和我一直在进行更改,提交它们然后推送到我的linux服务器上的远程裸仓库。另外,我一直在我的笔记本电脑上做一些实验,结果发生了一些不同的局部变化。

我没有尝试合并它们,而是决定将我的笔记本电脑恢复到远程仓库的状态。我曾尝试从远程仓库中删除更改,并在被警告我需要合并之后,我决定将(重置),我猜,在GIT语言中)恢复到最后的官方提交。我为所有事情做了这个,然后能够下拉文件。

然而,SourceTree告诉我,有24个更改我不得不推回到远程服务器,但我看不出这些更改是什么(特别是因为我的目标是没有任何我保存的东西)。这让我很紧张。

最终,我只是吹掉整个文件夹(包括.git),然后再次克隆远程存储库。

最后一个缺点是,如果你有任何未跟踪的新文件,如果你不记得暂时将它们复制到其他地方,它们就会被删除。

我的问题是,是否有办法将我的本地工作副本(和.git内容)还原到远程仓库的最新状态,是否保留工作副本中未跟踪的文件?

我确实找到Why do I have to push the changes I just pulled from origin in Git?,但它并没有真正回答我在这里描述的任何一个问题。

提前感谢任何见解。

d

3 个答案:

答案 0 :(得分:1)

我相信你要找的是git reset --hard origin/master,假设origin是你的远程,master是你的分支。

警告:这会破坏您拥有的任何已修改文件,但会影响未跟踪的文件。

答案 1 :(得分:1)

您可以使用git checkout将各个工作树文件重置为它们在索引中的显示方式(在HEAD或任何特定修订或分支上)。

请注意,git中 checkout 的含义与其他SCM系统中的含义大不相同。它意味着“看着它”,而不是“在我再次检查之前将其锁定为其他人”。

答案 2 :(得分:1)

我不太了解你的git pull& amp; git重置你执行以了解为什么git说有24个更改你必须推回。重新创建确切的命令可能为时已晚。发生的错误,但我们可能会解码该信息所发生的事情。

如果将来您的本地更改与远程存储库有所不同,我建议使用稍微不同的git工作流。首先从

开始

git fetch

这将检索任何新的提交并更新origin / master远程分支以及任何其他远程分支,但与git pull不同,它不会更改任何本地分支,甚至是master。

现在,如果您想保存不同的本地更改以供将来使用,请查看新的主题分支,

git checkout -b my_feature

现在您的分散本地工作上有一个分支指针,您可以重置主分支指针而不必担心丢失工作。首先,更改为您的主分支(应与my_feature在同一个提交中)

git checkout master

现在将其重置为origin / master,

git reset --hard origin/master

现在,您的旧作品已在my_feature中保存,而您的master分支再次与远程存储库匹配。

为了避免将来遇到这种麻烦,我强烈建议您始终致力于专题分支。这样你就可以git pull在主人身上而不用担心你当地的工作。当分享你与世界的工作时,你可以在推动之前rebase你的分支掌握,而且没有其他人甚至不需要知道你当地的分支。

我是Pro Git书籍的忠实粉丝,该书可在线获取。这是他们关于rebasing的章节。