我有两个分支master和i1:
分支主
:
int main() {
std::cout << "Hello World!";
std::cout << "1";
std::cout << "3";
std::cout << "5";
return 0;
}
分支机构i1
:
int main() {
std::cout << "Hello World!";
std::cout << "1";
std::cout << "2";
std::cout << "4";
std::cout << "6";
return 0;
}
将i1
合并到master
时发生冲突:
int main() {
std::cout << "Hello World!";
std::cout << "1";
<<<<<<< HEAD
std::cout << "2";
std::cout << "4";
std::cout << "6";
=======
std::cout << "3";
std::cout << "5";
>>>>>>> master
return 0;
}
每次提交都是按以下顺序完成的:
std::cout << "1";
commit master
std::cout << "2";
commit i1
std::cout << "3";
commit master
std::cout << "4";
commit i1
std::cout << "5";
commit master
std::cout << "6";
commit i1
我确实与Meld合并:
int main() {
std::cout << "Hello World!";
std::cout << "1";
std::cout << "2";
std::cout << "4";
std::cout << "6";
std::cout << "3";
std::cout << "5";
return 0;
}
是否可以要求合并工具根据提交历史自动创建合并:
int main() {
std::cout << "Hello World!";
std::cout << "1";
std::cout << "2";
std::cout << "3";
std::cout << "4";
std::cout << "5";
std::cout << "6";
return 0;
}
这是非常具体的,但是如果以下条件为真(并且您暗示它们为真):
然后,您可以使用以下算法来实现您想要的状态,而不是特定的合并策略:
git switch -c temp-branch `git merge-base master i1`
git log `git merge-base master i1`..master `git merge-base master i1`..i1 --oneline --reverse
不幸的是,我认为第3步的实现与您的特定用例密切相关。如果您可以简单地挑选列出的每个提交,那就太好了,但是在另一个分支的第一次提交时,您会得到一个需要“以某种方式”解决的冲突。但至少与一次性合并相比,冲突解决将在每次提交的基础上得到简化。