Git克隆并覆盖本地存储库

时间:2016-08-05 08:08:03

标签: git

我想在我的服务器上有一个bitbucket repo的最新副本(定期),但不确定我必须发出哪些git命令以避免拉动时可能发生的潜在合并冲突。
我能想到的唯一干净的方法是克隆到tmp目录然后复制/覆盖本地仓库 但必须有更好的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:4)

而不是克隆到tmp目录,然后用新克隆替换本地存储库, 你可以从远程获取硬重置你的本地:

git fetch origin master
git reset --hard origin/master

不会出现合并冲突,因为您只是采用origin/mater中的任何内容。

答案 1 :(得分:3)

合并冲突发生时 - 和 - 当您执行类似合并的操作时,例如:

  • 重新提交您的提交
  • 将您的提交与其他人合并,反之亦然
  • 使用git revert来恢复提交,以便使自己的分支与他们的分支不同

请注意这里的常见主题:您必须拥有您自己的提交,您自己的工作(或者他们特定部分的转换,但这些您的提交你正在添加)。

因此,如果您从未进行过自己的提交,那么您将永远不会有任何冲突。当然,这意味着您永远不会进行任何更改 - 或者如果您确实进行了更改,则必须将它们保留在您的分支上,始终与 分支机构分开。

但这正是Git首先做的事情,只要你避免运行git merge (以及git rebase等等)。

git pull命令由git fetch后跟git merge组成。 (好吧,你可以配置它,或者告诉它,使用git rebase代替git merge。但你不想要任何一个。)所以......不要使用{ {1}}。

对于刚接触Git的人来说,这是一个很好的建议:避免git pull ,因为它有两个的东西,你想要做一件事,然后再思考关于你是否想要任何第二件事,更不用说git pullgit merge作为第二件事。

janos' answer一样,如果您没有自己的提交,但希望您当前的分支完全匹配git rebase,则只需origin/master。请注意,当您运行git reset --hard时 - 我建议git fetch,而不是git fetch origin 1 - 您的Git会选择所有的分支机构,但重命名全部:他们的git fetch origin master成为您的master,他们的origin/master成为您的develop,他们的origin/develop成为您的feature/thing {1}},等等。

如果您 希望并因此在自己的分支上制作自己的提交,请确保您不要将它们命名为origin/feature/thing(这会令人困惑 2 )并且不要尝试以任何方式合并或改变它们,直到您确定这是一个好主意。

1 在当前/现代Git中,添加origin/whatever会限制您的Git仅提取master,并且Git会照常更新master。在较早的(1.8.4之前的)Git版本中,添加origin/master会以同样的方式限制您的Git,但会使更新{{1} }。所以你得到了他们的工作,你立即忘记了,这对你没有好处。仅获取master可以为您节省一点网络时间,然后您浪费数小时试图弄清楚为什么您没有任何,只是发现您选择的Linux发行版随附一个有400年历史的 3 版本的Git,出于某种不可思议的原因。 : - )

2 Git 不会感到困惑 - 它知道本地和远程跟踪分支很好 - 但它肯定会让人类感到困惑< / em>将origin/master作为本地分支,将master作为远程跟踪分支。

3 对幽默略有夸张。