当前,我们只是查看input1和base之间的差异以及input2和base之间的差异。
然而,如果input1和input2相对于base引起的编辑相同,我们应该更智能。
默认情况下,git使用冲突样式merge
,它将更改彼此进行比较并接受最长公共子字符串。
我们的实现匹配git的diff3
冲突样式,这不会将公共行移出冲突。
相关:#155965
创建一个名为conflict的新分支
在新分支上创建并提交一个文件merge_conflict_test.go,名称为“n1”
// branch conflict
package main
import (
"github.com/gin-gonic/gin"
)
func Foo1(c *gin.Context) {
s1 := s{
ID: 111,
Condition: "c1",
Check: true,
Name: "n1" // diff from master
}
}
func Foo2(c *gin.Context) {
line1 := "line1"
line2 := "line2"
line3 := "line3"
line4 := "line4"
line5 := "line5"
line6 := "line6"
}
func Foo3(c *gin.Context) {
s3 := s{
ID: 123,
Condition: "c3",
Check: true,
Name: "n3" // diff from master
}
}
返回到master分支,也在新分支上创建并提交一个文件merge_conflict_test.go,名称为“n1”
// branch master
package main
import (
"github.com/gin-gonic/gin"
)
func Foo1(c *gin.Context) {
s1 := s{
ID: 111,
Condition: "c1",
Check: true,
}
}
func Foo2(c *gin.Context) {
line1 := "line1"
line2 := "line2"
line3 := "line3"
line4 := "line4"
line5 := "line5"
line6 := "line6"
}
func Foo3(c *gin.Context) {
s3 := s{
ID: 123,
Condition: "c3",
Check: true,
}
}
提交后,转到conflict分支,重新基于master
在上面加上**"git.mergeEditor": false**
3种合并编辑器:
- 最初由@Void-king在#157469(评论)中发布*
5条答案
按热度按时间kknvjkwl1#
相关:#157997 (评论) 在 #157997
44u64gxh2#
这是一个反例,当对两侧进行差异化处理时,体验会变得更糟:
在不移除公共前缀/后缀的情况下,这两个更改可以很容易地合并:
siotufzp3#
是否有办法让复选框体验回来?我更喜欢复选框而不是当前的
codesens
提示。mqkwyuun4#
另一个我刚刚遇到的Git行为令人困惑的例子:
GitHub/git (冲突是什么?):
VS Code 合并编辑器(显然左边有人插入了两个方法,右边有人添加了一个方法):
1aaf6o9v5#
这个更糟糕:
GitHub(完全无法使用的差异):
VS Code:
两者都很混乱,但VS Code也比较幸运,得到了一个更好的差异,所以它要少混乱一些。
The right diff is also tough though .