git cherry pick--继续,'--无编辑';选项
我正在编写一个迁移git repos的脚本。我在樱桃树上跑步git cherry pick--继续,'--无编辑';选项,git,git-cherry-pick,Git,Git Cherry Pick,我正在编写一个迁移git repos的脚本。我在樱桃树上跑步 git add . git cherry-pick --continue 这将启动vim,提示我保存提交消息并冻结脚本。我正在寻找一个命令行选项,如--no edit或--cerial,来解决这个问题 丑陋的终端黑客可能也会受到欢迎;) 您可以使用: git cherry-pick <sha1> --no-commit git cherry pick--不提交 解决冲突后,可以从脚本提交冲突 当然,您可以设置cher
git add .
git cherry-pick --continue
这将启动vim,提示我保存提交消息并冻结脚本。我正在寻找一个命令行选项,如--no edit
或--cerial
,来解决这个问题
丑陋的终端黑客可能也会受到欢迎;) 您可以使用:
git cherry-pick <sha1> --no-commit
git cherry pick--不提交
解决冲突后,可以从脚本提交冲突
当然,您可以设置cherry pick策略选项,通过接受我们/他们的代码自动解决冲突
否则,您将得到标准的git冲突标记
+<<<<<<< HEAD
some code
+||||||| parent of 4d64ec6... test commit
+ first version code
+=======
+ second version code
+>>>>>>> 4d64ec6... test commit
+>4d64ec6。。。测试提交
在执行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中内置的任何内容。)来自:
对于Git 2.32(2021年第2季度),不再需要tihs
git cherry pick
/revert
带或不带-[no-]edit
未按预期生成编辑器(例如冲突后仍要求“revert--no edit
”),该问题已用git 2.32(2021年第2季度)更正
参见作者(2021年3月31日)(于2021年4月8日合并) :修复cherry pick和revert消息的编辑处理 报告人:Renato Botelho
签字人:以利亚·纽伦
审核人:Johannes Schindelin
save\u opts()
应保存任何非默认值。本打算这样做,但由于struct
replay\u选项中的大多数选项默认为0,因此它只保存非零值。
不幸的是,这并不总是适用于选项。编辑。
粗略地说,options.edit的cherry pick默认值为0,revert默认值为1。
使save\u opts()
记录与默认值不同的值
选项。编辑也过于简单化;我们有两个以上的案例。
以前存在的行为如下所示:
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
- 当被指定时,我们遵循它所说的
- 未指定时,我们需要检查正在创建的当前提交是否正在解决冲突,以及咨询options.action和
isatty(0)
此时,添加一个压缩选项的should_edit()
实用程序函数。根据非冲突情况的附加信息,将向下编辑为布尔值
continue\u single\u pick()
是负责冲突后恢复的函数,无论选择的提交是一个提交还是多个提交。
使此函数在所有情况下都停止假定编辑行为,以便它能够正确处理!isatty(0)
和不编辑提交消息的特定请求
我不清楚您发布的声明,所以我运行了一个测试,发现“git cherry pick--continue”会冻结,直到合并冲突得到解决。那么如何解决它们呢?我在项目根目录中解决与git add.
的冲突。我想接受所有更改,然后运行git cherry pick--continue
@HaraldNordgren我对git rebase
也有同样的问题,我更喜欢fits选项(使用-c
),因为没有副作用。此外,它还可以很容易地转换为别名。@JosephK.Strauss:注意,您可以使用shell别名设置GIT\u编辑器
,例如,alias foo='GIT\u EDITOR=true GIT cherry pick--continue'
,或者通过使用的GIT别名
来调用shell。但是,如果-c core.editor=true
足够,也可以。这种技巧在交互式rebase中也可以很好地工作:git-c core.editor=true rebase--继续
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