我运行以下命令:
git cherry-pick SHA --strategy-option theirs
并得到这样的冲突,等待手动解决:
deleted by us: SOME_FILE
有没有办法通过添加我们删除的文件来让 git 自动解决此类冲突?
我们删除的是您在提交中添加的新文件(被挑选(。但是这些文件不存在于 当前分支(您正在挑选的分支(。
因此,在这种情况下,您必须通过运行以下命令手动添加这些文件:
git add <file-path>
但是,如果您认为,在挑选樱桃后,当前分支中将不再需要这些文件,在这种情况下,您可以执行以下操作:
git rm <file-path>
如果您确定要添加所有"被我们删除"的文件,您可以执行以下操作:
git status | sed -n 's/deleted by us://p' | xargs git add
或者,如果您想删除所有"被我们删除"文件:
git status | sed -n 's/deleted by us://p' | xargs git rm
就我而言,在弹出错误之前,我不知道哪个文件需要解决冲突。所以,场景是:我创建了一个新文件,提交了它 (ID1(,修改了它并在源分支中再次提交它 (ID2((樱桃挑选(,当我使用"修改后的"提交 ID (ID2( 进行樱桃挑选时,git 抱怨因为该文件从未存在于目标分支中(樱桃挑选到(。
git cherry-pick 抛出了以下错误:
CONFLICT (modify/delete): <SOME_FILE> deleted in HEAD and modified in <SHA>... Update the CSV file content. Version <SHA>... Update the CSV file content of <SOME_FILE> left in tree.
显示 git 状态
deleted by us SOME_FILE
基于答案的灵感,这是我尝试过的解决方案。合并工具(例如:此处使用的vimdiff3(允许我们选择冲突解决方案:使用(m(odified或(d(eleted文件,或(a(bort。请注意,合并工具会创建需要根据需要清理的 *.orig 文件。
sha=<enter SHA>
conflict_resolution='m'
file_path=<enter file path in the repo>
if ! git cherry-pick $sha --strategy-option theirs
then
echo "Auto Merge failed. Attempting to use merge tool."
yes $conflict_resolution | git mergetool --tool=vimdiff3 -- $file_path
git clean -f *.orig
git commit -m "From Jenkins Job: ${JOB_NAME} Build: ${BUILD_NUMBER}"
echo "Merge successful using merge tool"
else
echo "Auto Merge successful."
fi
PS:除了挑选樱桃,我想该解决方案也可以应用于典型的合并场景。