git pull选项可以防止合并冲突

时间:2013-04-12 20:13:51

标签: git git-merge

在执行git pull时是否存在不允许合并冲突的选项?我看过merge strategies但似乎没有人符合这个描述。我正在寻找像git pull --quit_if_possible_merge

这样的选项

基本上,想要一个拉到生产站点的命令,没有任何合并冲突的风险,这会在我们解决时暂时导致网站崩溃。

5 个答案:

答案 0 :(得分:14)

怎么样:

git pull --ff-only 

如果在其他答案中所说的是真的,那么这应该具有完全期望的效果。否?

--ff-only标志代表“快进”,这就是Git如何引用其中一个合并分支包含另一个(严格超集)的所有提交的情况。这很特殊,因为这意味着不可能发生合并冲突。在前面的分支上的提交只是添加到其他分支,每个人都很高兴。

答案 1 :(得分:3)

我认为没有这样的旗帜。如果发生冲突,则会发生冲突并需要处理。但是有一种合并策略可以保证不会发生合并冲突:不要在生产网站上修改或提交任何内容

如果在生产站点上没有提交任何内容,则没有任何内容可以与之冲突。在从本地计算机上的生产分支上进行所有合并,并在从生产站点撤出之前解决所有合并冲突。

答案 2 :(得分:3)

正如其他人所说:如果您在本地存储库中提交了任何内容,则只会发生合并冲突。如果不这样做,您将不会遇到任何合并冲突。

如果您没有提交任何内容,但是您在本地git存储库中工作,即您更改了文件或创建了新文件,git pull仍然会在您需要更新修改后的文件时遇到麻烦。 - 因此,不要直接在本地存储库中工作,你没事。

接下来,如果您坚持在本地存储库中工作并想到git pull来更新您的文件。您必须决定修改后的文件将会发生什么。 如果您只是想放弃所有本地更改并只是获取远程存储库中的文件,则可以执行git fetch;git reset --hard @{u}

答案 3 :(得分:1)

在Git中合并时,您可以执行以下类型的合并:

git merge -ff-only branch_to_merge_into_this_one

如果Git发现您的合并可以使用快进方法完成,那么这只会完成您的合并。否则Git将中止合并并让你知道合并是不可能的快进。

那么什么是快进合并,以便它可以确保不会发生合并冲突。快进合并检查有问题的两个分支的提交历史(比如A和B,你在B中合并),然后检查B是否包含A的完整提交历史。另外,A不包含任何不属于B的提交。这意味着当在B中合并时,保存即可通过将所有B的新提交堆叠在A的HEAD之上然后移动A的头部来进行合并。到了B&#39的头部。以这种方式,变更集是线性应用的,并且不存在冲突编辑的可能性,因为Git在其提交历史中将有足够的信息来负责任地决定您做哪些更改以及哪些更改。

答案 4 :(得分:1)

Git 2.0(2014年第2季度)在commit b814da8中使用push.ff添加新设置:

在你的情况下:

git config push.ff only

pull.ff::
  

默认情况下,Git在合并作为当前提交后代的提交时不会创建额外的合并提交。相反,当前分支的提示是快进的。

     
      
  • 当设置为false时,此变量告诉Git在这种情况下创建额外的合并提交(相当于从命令行提供--no-ff选项。)
  •   
  • 设置为only时,只允许此类快进合并(相当于从命令行提供--ff-only选项。)
  •