我正在编写用于迁移git repos的脚本。关于樱桃挑选冲突我跑
git add .
git cherry-pick --continue
这会调出vim,提示我保存提交消息并冻结脚本。我正在寻找一个命令行选项,如--no-edit
或--porcelain
来解决这个问题。
丑陋的终端黑客也可能受到欢迎;)
答案 0 :(得分:16)
作为Zildyan said in his answer,在执行git add
之前,您需要解决所有冲突。因此,不应使其完全自动化。
也就是说,要跳过编辑提交消息,您只需将编辑器设置为不执行任何操作并报告成功的命令。在类Unix系统上理想的是true
命令。因此:
git -c core.editor=true cherry-pick --continue
会做到这一点。 (您也可以使用任何环境变量GIT_EDITOR
,VISUAL
或EDITOR
;事实上,如果设置了其中任何一个,您必须使用它们而不是core.editor
,因为序列是:如果已设置,则使用$GIT_EDITOR
;否则使用$VISUAL
如果已设置;否则使用$EDITOR
如果已设置;否则使用core.editor
如果已设置;否则使用此版本Git中内置的任何内容。)
答案 1 :(得分:0)
您可以使用:
git cherry-pick <sha1> --no-commit
解决冲突后,您可以通过脚本提交。
当然,您可以通过接受我们/他们的代码来设置樱桃挑选策略选项以自动解决冲突
如果没有它,你将获得冲突的标准git标记
+<<<<<<< HEAD
some code
+||||||| parent of 4d64ec6... test commit
+ first version code
+=======
+ second version code
+>>>>>>> 4d64ec6... test commit
答案 2 :(得分:0)
git -c core.editor=true cherry-pick --continue
在 Git 2.32(2021 年第二季度)中,不再需要 tihs。
git cherry-pick
/revert
带或不带 --[no-]edit
都没有按预期生成编辑器(例如,冲突后仍然要求编辑消息的“revert --no-edit
”),这已通过 Git 2.32(2021 年第二季度)进行更正。
参见commit 39edfd5的Elijah Newren (newren
)(2021 年 3 月 31 日)。
(由 Junio C Hamano -- gitster
-- 于 commit 82fd285 合并,2021 年 4 月 8 日)
sequencer
:修复挑选和回复消息的编辑处理报告人:Renato Botelho
签字人:Elijah Newren
审核人:约翰内斯·辛德林
save_opts()
应保存所有非默认值。
它的目的是这样做,但由于 struct replay_opts
中的大多数选项默认为 0,它只保存非零值。
不幸的是,这并不总是适用于 options.edit。
粗略地说,options.edit 对于cherry-pick 的默认值为0,对于revert 的默认值为1。
使 save_opts()
记录一个与默认值不同的值。
options.edit
也过于简单;我们有两个以上的案例。
之前存在的行为如下:
Non-conflict commits Right after Conflict
Edit iff isatty(0) Edit (ignore isatty(0))
No edit See above
Edit (ignore isatty(0)) See above
(*) See above
(*) Before stopping for conflicts, No edit is the behavior. After
stopping for conflicts, the --no-edit flag is not saved so see
the first two rows.
但是,预期的行为是:
Non-conflict commits Right after Conflict
Edit iff isatty(0) Edit iff isatty(0)
No edit Edit iff isatty(0)
Edit (ignore isatty(0)) Edit (ignore isatty(0))
No edit No edit
为了获得预期的行为,我们需要将 options.edit 更改为三态:unspecified、false 或 true。
isatty(0)
。should_edit()
实用程序函数,该函数根据非冲突情况的附加信息将 options.edit
压缩为布尔值。continue_single_pick()
是负责在冲突后恢复的函数,无论是选择一个提交还是多个提交。
使此函数在所有情况下都停止假设编辑行为,以便它可以正确处理 !isatty(0)
和不编辑提交消息的特定请求。