我运行了以下命令:
git cherry-pick SHA --strategy-option theirs
然后会遇到这样的冲突,需要手动解决:
deleted by us: SOME_FILE
有没有一种方式可以让Git自动通过添加被我们删除的文件来解决这样的冲突?
我运行了以下命令:
git cherry-pick SHA --strategy-option theirs
然后会遇到这样的冲突,需要手动解决:
deleted by us: SOME_FILE
有没有一种方式可以让Git自动通过添加被我们删除的文件来解决这样的冲突?
被我们删除的是您在提交中添加的新文件(被 cherry-pick)。但是这些文件在当前分支中不存在(您正在将其 cherry-pick 到的分支)。
因此,在这种情况下,您需要通过运行以下命令手动添加这些文件:
git add <file-path>
然而,如果您认为在cherry-pick后这些文件在当前分支中不再需要,那么您可以执行以下操作:git rm <file-path>
git add .
来简单地添加 cherry-pick
中的所有文件(忽略我们分支中的删除)。 - Muhammad Yasirroni如果您确定要添加所有“我们删除”的文件,可以执行以下操作:
git status | sed -n 's/deleted by us://p' | xargs git add
或者,如果您想删除所有“由我们删除”的文件:
git status | sed -n 's/deleted by us://p' | xargs git rm
git status | sed -n 's/\tdeleted by us: //p' | awk '{ printf "\"%s\"\n", $0 }' | xargs git add
- altius_rupCONFLICT (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)、删除的文件(d)或中止(a)。请注意,合并工具会创建*.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
附注:除了使用cherry-pick,我想这个解决方案也适用于典型的合并场景。
git add
命令将这些文件添加回来,因为 Git 会在工作树中保留“theirs”版本。你可以编写一个脚本,使用git ls-files --stage
命令查找在第一阶段和第三阶段存在但在第二阶段不存在的文件:因为 1 = base,2 = ours,3 = theirs,这些文件恰好是“deleted by us”。 - torek