首页 > 解决方案 > 当文件夹和文件已经存在时克隆 git 存储库

问题描述

我在两台电脑上工作,交替使用哪一台,每次都在它们之间移动整个东西。然后我在计算机 A 上设置 git 并将其与 github 存储库同步。到目前为止,一切都很好。

现在我想将它克隆到计算机 B,但是 git clone 不起作用,因为文件夹和文件已经存在。

这就是我在计算机 B 上所做的:

git init
git remote add origin <my-github-rep.git>
git fetch

现在我需要把 github 上的最新文件带到这里。

git reset origin/master

我认为这就是将当前 HEAD 重置为指向原点的 master 分支的原因。

好的,现在问题来了:

我假设此时我需要以下内容:

git checkout -t origin/master

因为这会带来所有来自源的最新文件,并且会在计算机 B 上检查整个文件。这就是我想要的,但它不起作用。这是错误消息:“致命:一个名为'master'的分支已经存在。

我该如何克服这个问题,只带文件?我做错了什么。

(澄清一下:我不想只是删除文件夹和文件并简单地克隆存储库,因为那里有更多不应该在 git 上的文件,所以很难挑选;在这个点我想要的是从远程存储库中的最新文件覆盖我本地文件夹中的所有相关文件 - 这样我将拥有最新的代码,并且 git 未跟踪的文件不会受到影响)

标签: gitgit-clonegit-checkout

解决方案


您的git reset命令创建了名为master. 它已经指向正确的提交。问题是您现在有一个填充的索引,但没有正确填充的工作树。

此时最简单的解决方案是将所有要保留的文件完全移出该目录,例如,mkdir ../save然后mv * ../save将它们移开。然后你有一个的当前工作树,并git status会告诉你所有文件都被删除但没有暂存提交。然后,您可以执行任一操作git reset --hardgit checkout -- .将所有文件恢复,然后mv ../save/* .将保存的文件放回原处。

那时,剩下的一个问题是您的本地master没有上游。要解决这个问题,只需运行:

git branch --set-upstream-to=origin/master

你会准备好的。


推荐阅读