git-rebase/merge/cherry选择一个重新排列代码块的提交



假设分支和功能支路最初有相同的代码:

Block A
Block B

其中块A和块B可以是任意的代码行。现在,在分支中,块A被更改,例如

**Block A**
Block B

然后,在特征分支中,块A移动到块B之后,即

Block B
Block A

git认为我正在做的是删除块A并在块B之后添加一些新行,所以如果我尝试

  1. 合并功能分支到
  2. 上重新调整功能分支,或
  3. 分支中的Cherry pick功能

发生冲突:

<<<<<<< HEAD
**Block A**
=======
>>>>>>> Move Block A behind Block B
Block B
Block A

预计会发生冲突,但这里的问题是,git无法帮助更新块A中的更改。有更好的解决方案吗?例如,不知何故,让git认为我正在删除块B并在块A之前添加内容?

(我欢迎任何关于更好标题的建议。(

目前,没有比在合并时解决冲突更好的方法了:只需从两个"块"中选择新的块A代码和更新的块B代码;侧面";合并的。(如果你将merge.conflictStyle设置为diff3,这样你就可以在冲突的文件中看到代码在合并基础版本中的布局,这可能会更容易。如果你使用各种合并工具,这可能没有任何区别,所以是否将merge.conflictStyle设置为diff3取决于你。(

未来更智能的差异和合并算法可能能够解决这一问题,并为您提供更简单的合并冲突来解决,甚至可以自行解决。但这在Git中还没有。

最新更新