gpt4 book ai didi

git - git可以 merge 两个文件而忽略它们的共同祖先吗

转载 作者:太空狗 更新时间:2023-10-29 13:14:33 24 4
gpt4 key购买 nike

例如我有以下文件:

// first part
function() {
var timer = 1;
}

// second part
function() {
var timer = 2;
}

// third part
function() {
var timer = 3;
}

现在两个不同的分支改变了它。我有变化:
在分支 1 中:

// first part
function() {
var timer = "changed in branch1";
}

// second part
function() {
var timer = 2;
}

// third part
function() {
var timer = 3;
}

在分支2中:

// first part
function() {
var timer = 1;
}

// second part
function() {
var timer = "changed in branch2";
}

// third part
function() {
var timer = 3;
}

使用 3 向 merge ,这些更改将 merge 干净,因为每个分支都更改了一大块不同于另一个的代码。但是, merge 时我想要以下内容:

// first part
function() {
<<<<<<< branch1
var timer = "changed in branch1";
=======
var timer = 1;
>>>>>>> branch2
}

// second part
function() {
<<<<<<< branch1
var timer = 2;
=======
var timer = "changed in branch2";
>>>>>>> branch2
}

// third part
function() {
var timer = 3;
}

有没有办法在git中实现这种 merge ?我假设基于评论,这种 merge 将是这样的:

  1. 比较一个文件
  2. 在最终版本中插入不在差异中的 block
  3. 用冲突标记标记不同的 block

最佳答案

Git 提供管道命令 git merge-file 允许您在没有基础的情况下 merge 两个文件,但是没有一种简单的方法来调用它。如果您正在将 branch merge 到 master 中并且想要对某些文件 foo.txt 进行无基础的 merge :

git show master:foo.txt > /tmp/master.foo.txt
git show branch:foo.txt > /tmp/branch.foo.txt
echo -n > /tmp/empty.txt
git merge-file -p -L master -L base -L branch /tmp/master.foo.txt /tmp/empty.txt /tmp/branch.foo.txt > foo.txt

在上面的例子中,这会产生:

// first part
function() {
<<<<<<< master
var timer = 1;
=======
var timer = "changed in branch1";
>>>>>>> branch
}

// second part
function() {
<<<<<<< master
var timer = "changed in branch2";
=======
var timer = 2;
>>>>>>> branch
}

// third part
function() {
var timer = 3;
}

(编写脚本留给读者作为练习。)

关于git - git可以 merge 两个文件而忽略它们的共同祖先吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com