我想在我的服务器上(定期)获得一个最新的bitbucket存储库副本,但是不确定我必须发出哪些git命令来避免拉动可能发生的合并冲突。
我能想到的唯一干净的方法是克隆到tmp目录,然后复制/覆盖本地存储库。
但是必须有更好的方法来实现这一目标吗?
无需克隆到tmp目录,然后用该新克隆替换本地存储库,您可以从远程获取并硬重置本地:
git fetch origin master
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
不会发生合并冲突,因为您只需要获取中的内容即可origin/mater。
当\xe2\x80\x94且仅当\xe2\x80\x94执行类似合并的操作时,才会发生合并冲突,例如:
\n\ngit revert恢复提交,以便创建与他们不同的自己的分支请注意这里的共同主题:您必须有自己的提交,您自己的工作(或他们的特定部分的还原,但同样这些是您要添加的提交)。
\n\n因此,如果您从不做出自己的承诺,则永远不会发生任何冲突。当然,这意味着您永远不能进行任何更改\xe2\x80\x94,或者如果您确实进行了更改,则必须将它们保留在您的分支上,始终与它们的分支分开。
\n\n但这正是 Git 最初所做的,只要你避免运行git merge(等等git rebase)。
该git pull命令由git fetch后跟组成git merge。(好吧,你可以配置它,或者告诉它,使用git rebase而不是git merge。但是你不需要其中任何一个。)所以......不要使用git pull。
对于任何刚接触 Git 的人来说,这是一个很好的建议:避免git pull,因为它做了两件事,而你想做一件事,然后考虑一下你是否想要任何第二件事,更不用说git merge或git rebase作为第二件事。
正如janos' 的回答一样,如果您没有自己提交,但希望当前分支origin/master完全匹配,您可以简单地git reset --hard. 请注意,当您运行git fetch\xe2\x80\x94I推荐git fetch origin,而不是git fetch origin master1 \xe2\x80\x94 时,您的 Git 将拾取它们的所有分支,但将它们全部重命名:它们master变成您的origin/master,它们变成您develop的origin/develop,它们feature/thing变成您的origin/feature/thing,依此类推。
如果您确实想要并因此在自己的分支上进行自己的提交,只需确保不要命名它们origin/whatever(这会令人困惑2)并且不要尝试以任何方式合并或变基它们直到您确信这是个好主意。
1在当前/现代的 Git 中,添加master限制您的 Git 只能选择它们的master,并且您的 Git 会origin/master照常更新。在旧版(1.8.4 之前)的 Git 中,添加会master以同样的方式限制您的 Git,但也会使其无法更新origin/master。所以你得到了他们的工作,但你很快就忘记了,这对你没有好处。获取只会master为你节省一点网络时间,然后你会浪费几个小时试图弄清楚为什么你没有得到任何东西,结果却发现你选择的 Linux 发行版附带了 400 年历史的Git 3版本,对于某些人来说深不可测的原因。:-)
2 Git不会感到困惑\xe2\x80\x94它知道本地和远程跟踪分支很好\xe2\x80\x94但是对于人类来说,将其作为origin/bruce本地分支和不同的origin/bruce远程跟踪肯定会感到困惑分支。
3为了幽默,稍微夸张一下。
\n| 归档时间: |
|
| 查看次数: |
6915 次 |
| 最近记录: |