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