我有一个分支,其中包含几十个提交记录,最近已经在master
的基础上进行了变基。在解决冲突时发生了一些错误,现在需要编辑其中六个提交记录。
需要编辑的SHA列表可以通过以下方式找到:
$ git log --format=format:%H master..branch-in-question -- file/path
这可以与git rebase -i
一起使用,以便逐个选择每个提交进行edit
(这样做可能比花时间询问此问题要快,但我相信您都明白)。我的问题是是否可以将上面的git log
中的sha列表传递给git rebase
,并自动选择这些提交进行edit
。
core.editor
、$VISUAL或$EDITOR或vi中设置),然后将GIT_SEQUENCE_EDITOR设置为git rebase -i
中的脚本。 这依赖于命令序列由$GIT_SEQUENCE_EDITOR编辑,而提交由core.editor
编辑的事实。(两者都会回退到${VISUAL:-${EDITOR:-vi}}
。) - torekeditor=$(git config --get core.editor); editor=${editor:-${VISUAL:-${EDITOR:-vi}}}; <sed stuff>; $editor "$@"
。然后GIT_SEQUENCE_EDITOR=<path to your script> git rebase -i <args>
将会做 OP 想要的事情,只要稍微修改一下你的脚本来编辑 "$@",就不需要先进行一次 pick-to-edit 了。为了处理旧版本 Git 中 rebase-todo 不在.git/rebase-merge/
中的情况,使用 "$@" 来定位命令文件。 - torek$editor
调用(然后您可以省略第一次设置本地变量$editor
)。不确定是什么原因导致最后一个 "pick" 没有更改。也许值得留下一些调试轨迹和/或构建一个一次性编辑脚本,以便您可以只运行sed
一次,这两者都将有助于解决第一项问题。(无论如何,这对于可能是一次性任务的工作来说是很多工作 https://xkcd.com/1319/ :-) ) - torekbreak
指令,在第一次提交之前而不是编辑第一次提交,这样你也可以捕获它 :) - DylanYoung