0

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

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

我没有尝试合并它们,而是决定我真的只想将我的笔记本电脑恢复到远程仓库的状态。我曾尝试从远程仓库中拉下更改,在被警告我需要合并之后,我决定恢复(我猜是 GIT 语言中的“重置”)到最后一次正式提交。我对所有东西都这样做了,然后就可以下载文件了。

然而,SourceTree 告诉我,有 24 处更改必须推送回远程服务器,但我看不到这些更改是什么(特别是因为我的目标是不保存任何我所做的事情)。这让我非常紧张。

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

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

我的问题是是否有任何方法可以将我的本地工作副本(和 .git 内容)恢复到远程仓库的最新状态,而使工作副本中的任何未跟踪文件保持不变?

我确实找到了为什么我必须在 Git 中推送我刚刚从原点提取的更改?但它并没有真正回答我在这里描述的任何一个问题。

提前感谢您的任何见解。

D

4

3 回答 3

1

我相信您正在寻找的是 git reset --hard origin/master,假设那origin是您的遥控器并且master是您的分支。

警告:这将清除您拥有的任何修改过的文件,但它不应该影响未跟踪的文件。

于 2012-12-03T13:41:59.693 回答
1

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

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

于 2012-12-03T13:55:16.787 回答
1

我对您执行的 git pull 和 git reset 的细节了解得不够多,无法理解为什么 git 说您必须推迟 24 项更改。重新创建发生的确切命令和错误可能为时已晚,但我们可能可以利用该信息解码发生的事情。

如果将来,您的本地更改与远程存储库发生分歧的情况相同,我建议您使用稍微不同的 git 工作流程。首先从

git fetch

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

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

git checkout -b my_feature

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

git checkout master

现在将其重置为原点/主控,

git reset --hard origin/master

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

为了在将来避免这个麻烦,我强烈建议始终在主题分支上工作。这样你就可以git pull掌握大师而不用担心你的本地工作。当需要与世界分享您的工作时,您可以rebase在推送之前先掌握您的分支,而其他人甚至不必知道您的本地分支。

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

于 2012-12-03T20:19:43.180 回答