我运行以下命令:
git cherry-pick SHA --strategy-option theirs
并发出类似的冲突,等待手动解决:
deleted by us: SOME_FILE
有没有办法让git通过添加我们删除的文件自动解决此类冲突?
答案 0 :(得分:9)
我们删除是您在提交中添加的新文件(获取樱桃)。但这些文件不存在于 当前分支(您正在挑选的分支)。
因此,在这种情况下,您必须通过运行
添加这些文件手动git add <file-path>
但是如果您认为,在采摘樱桃后,当前分支中将不再需要这些文件,在这种情况下,您可以这样做:
git rm <file-path>
答案 1 :(得分:3)
如果您确定要添加所有“我们删除的”文件,则可以执行以下操作:
git status | sed -n 's/deleted by us://p' | xargs git add
或者,如果您要删除所有“我们删除的”文件:
git status | sed -n 's/deleted by us://p' | xargs git rm
答案 2 :(得分:0)
就我而言,在错误弹出之前,我不知道哪个文件需要解决冲突。所以,场景是:我创建了一个新文件,提交了它(ID1),修改了它并在源分支(从樱桃中挑选)再次提交了它(ID2),当我使用了“修改后的”提交ID(ID2)对于cherry-pick,git 抱怨,因为该文件从不存在于目标分支(cherry-pick into)中。
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 status 显示
deleted by us SOME_FILE
基于 answer 的灵感,这是我尝试过的解决方案。合并工具(例如:此处使用的 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:除了cherry-pick,我想该解决方案也可以应用于典型的合并场景。