我希望能定期在我的服务器上拥有最新的Bitbucket存储库副本,但不确定要发出哪些git命令以避免拉取时可能发生的合并冲突。
我唯一想到的正确方法是将其克隆到临时目录,然后复制/覆盖本地存储库。
但一定有更好的方法来实现这一点吧?
我希望能定期在我的服务器上拥有最新的Bitbucket存储库副本,但不确定要发出哪些git命令以避免拉取时可能发生的合并冲突。
我唯一想到的正确方法是将其克隆到临时目录,然后复制/覆盖本地存储库。
但一定有更好的方法来实现这一点吧?
不要将代码克隆到临时目录并用该新克隆替换本地版本库,而是可以从远程仓库 获取 最新代码,并对本地版本库进行 强制重置:
git fetch origin master
git reset --hard origin/master
由于您只是获取origin/master
中的内容,因此不会出现合并冲突。
git revert
撤消提交,以便创建与其不同的自己的分支git merge
(以及git rebase
等)。
git pull
命令由 git fetch
和 git merge
组成。(好吧,你可以配置或告诉它使用 git rebase
而不是 git merge
。但你都不想要。)所以...不要使用 git pull
。git pull
,因为它会做两件事情,而你只想做一件事情,然后再考虑一下你是否想要任何第二件事情,更不用说 git merge
或者 git rebase
作为第二件事情了。origin/master
完全匹配,可以简单地使用git reset --hard
。请注意,当你运行git fetch
时——我建议使用git fetch origin
,而不是git fetch origin master
1——你的Git将获取所有他们的分支,但会将它们重命名:他们的master
变成了你的origin/master
,他们的develop
变成了你的origin/develop
,他们的feature/thing
变成了你的origin/feature/thing
等。
如果你确实需要并因此进行了自己的提交,在自己的分支上,请确保不要将它们命名为origin/whatever
(这会很困惑2),在确定这是一个好主意之前,请不要尝试合并或变基它们。
master
会限制你的Git仅选择他们的master
,而你的Git像往常一样更新origin/master
。在旧版本(1.8.4之前)的Git中,添加master
同样会限制你的Git,但也会使它不更新origin/master
。所以你得到了他们的工作,但你立即忘记了所有关于它的内容,这对你没有好处。只获取master
可以节省一些网络时间,然后你会浪费数小时来尝试弄清楚为什么你什么都没得到,只发现你选择的Linux发行版出于某种难以理解的原因使用了一个400年前的Git版本。:-)
Git不会被搞糊涂——它非常了解本地和远程跟踪分支——但对于人类来说,将origin/bruce
作为本地分支和不同的origin/bruce
作为远程跟踪分支会非常令人困惑。
git fetch origin master
,而git fetch origin
只是次要的(仅适用于旧版本)。 - janosgit fetch
),但我经常设置多个远程,所以最终不得不运行几个git fetch
,或者定义一个远程组或其他什么。我曾经认为版本2.0之前的Git很少见,但某些未被提及的咳咳centos咳咳发行版仍然使用1.7.x! - torek