data 我创建了功能分支: git checkout -b feature 然后是串行提交的更改: fo-6ren">
gpt4 book ai didi

git - 使用交互式 rebase 在分支中间修改提交需要解决冲突

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

例如,master 分支有 init 提交,内容由以下人员创建:

echo "init" > data

我创建了功能分支:

git checkout -b feature

然后是串行提交的更改:

for newLine in feature1 feature2; do echo "$newLine" >> data; git commit -am "$newLine" ; done

我想更改 feature1 提交:

git rebase -i master

提交“编辑”feature1,更改数据文件并继续 rebase :

sed -i 's/feature1/F/g' data; git add data; git rebase --continue

但是有冲突:

init
<<<<<<< HEAD
F
=======
feature1
feature2
>>>>>>> f4ac9dc... feature2

是否可以避免这种冲突。我只需要应用差异。结果将是:

init
F
feature2

不合适的解决方案:

git rebase -s recursive -X {ours,theirs} -i master

最佳答案

我能够想出一个自定义 merge 工具,它允许在以下假设下自动解决所描述场景的冲突:

  1. 修改更改和上游更改(如果有)仅限于更改的行(即没有添加或删除行)。

  2. 冲突完全是由于更改的对接(即更改不得重叠)。

然后,可以通过将稍后的更改转换为 ed 脚本(通过绝对行号表示)并在文件的本地版本上运行该脚本来解决此类冲突。

下面的 dummymerge 脚本实现了这个想法。

必须在git中注册如下:

git config mergetool.dummymerge.cmd 'dummymerge $BASE $LOCAL $REMOTE > $MERGED'
git config mergetool.dummymerge.trustExitCode true

使用它来自动解决所描述类型的冲突,如下所示:

git mergetool -t dummymerge

模拟 merge

#!/bin/bash

myname=$(basename "$0")

if [ $# -ne 3 ]
then
echo "Usage: $myname base_rev rev1 rev2"
exit 1
fi

diff -e "$1" "$3"|patch -e -o - "$2"

关于git - 使用交互式 rebase 在分支中间修改提交需要解决冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310621/

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