这样做时是否有一个选项git pull
不会允许任何合并冲突的可能性?我查看了合并策略,但似乎没有一个符合这个描述。我正在寻找一个像git pull --quit_if_possible_merge
基本上,想要一个用于拉到生产站点的命令,而不会有任何合并冲突的风险,这会在我们解决它时暂时关闭站点。
关于什么:
git pull --ff-only
如果其他答案中所说的是真的,那么这应该具有完全预期的效果。不?
该--ff-only
标志代表“快进”,这是 Git 如何指代其中一个合并分支包含另一个(严格超集)的所有提交的情况。这很特殊,因为这意味着不可能发生合并冲突。前面分支上的提交等简单地添加到其他分支,每个人都很高兴。
我认为没有这样的标志。如果发生冲突,它就会发生冲突并需要处理。但是有一个合并策略可以保证没有合并冲突:不要在生产站点上修改或提交任何东西。
如果在生产站点上没有提交任何内容,那么就没有任何冲突。在本地机器上的生产分支上进行所有合并,并在从生产站点拉取之前解决那里的所有合并冲突。
正如其他人已经说过的:如果您在本地存储库中提交了任何内容,您只会遇到合并冲突。如果不这样做,您将不会遇到任何合并冲突。
如果您没有提交任何内容,但是您在本地 git 存储库中工作,即您更改了文件或创建了新文件,git pull
那么当它需要更新您修改的文件时,它仍然会给您带来麻烦。- 因此,不要直接在本地存储库中工作,你很好。
接下来,如果您坚持在本地存储库中工作并考虑git pull
更新文件。您必须决定修改后的文件会发生什么。如果您只是想放弃所有本地更改并只获取远程存储库中的文件,您可以执行git fetch;git reset --hard @{u}
.
在 Git 中合并时,您可以执行以下类型的合并:
git merge -ff-only branch_to_merge_into_this_one
只有当 Git 发现您的合并可以使用快进方法完成时,这才会完成您的合并。否则 Git 将中止合并,并让您知道合并不可能快进。
那么什么是快进合并,它可以保证不会发生合并冲突。快进合并检查有问题的两个分支的提交历史记录(比如 A 和 B,你在 A 上合并到 B),然后检查 B 是否包含 A 的完整提交历史记录。此外,A 不包含任何不属于 B 的提交。这意味着在 B 中合并时可以保存,然后通过将 B 的所有新提交堆叠在 A 的 HEAD 之上然后将 A 的 HEAD 移动到 B 的 HEAD 所在的位置进行合并。以这种方式,更改集是线性应用的,并且不会发生冲突的编辑,因为 Git 将在其提交历史中拥有足够的信息来负责任地决定您需要和不想要哪些更改。
Git 2.0(2014 年第二季度)在提交 b814da8中添加了一个新设置push.ff
:
在你的情况下:
git config push.ff only
pull.ff::
默认情况下,Git 在合并作为当前提交的后代的提交时不会创建额外的合并提交。相反,当前分支的尖端是快进的。
- 当设置为 时
false
,这个变量告诉 Git 在这种情况下创建一个额外的合并提交(相当于--no-ff
从命令行提供选项)。- 当设置为 时
only
,只允许这样的快进合并(相当于--ff-only
从命令行给出选项)。