在git rebase期间自动选择sha进行编辑

时间:2016-10-18 19:49:50

标签: git

我有一个分支,有几十个提交,最近在master之上重新定位。在解决冲突期间,出现了一些错误,现在需要编辑这些提交中的六个。

需要编辑的sha列表可以通过以下方式找到:

$ git log --format=format:%H master..branch-in-question -- file/path

可以与git rebase -i一起使用,为edit单独选择每一个(并且可能比花时间提问这个问题更快,但我确定你们都明白了) 。我的问题是,是否可以将上述git log中的sha的列表传递到git rebase并让它自动选择edit的提交。< / p>

1 个答案:

答案 0 :(得分:1)

我不知道有这样做的内置方式,但我有一个应该save you some time的解决方法。

首先,启动交互式rebase:

git rebase -i

将第一个(也是第一个)提交的命令从pick更改为edit,然后保存并退出。

运行此脚本:

#!/bin/bash

for sha in $(git log --format=format:%H master..branch-in-question -- file/path)
do
  sha=${sha:0:7}
  sed -i "s/pick $sha/edit $sha/" .git/rebase-merge/git-rebase-todo
done

然后做:

git rebase --continue

这会立即暂停rebase,将你手工完成的编辑应用到todo文件,然后继续。

您无法提前创建待办事项文件,因为这样做会导致Git认为您已经开始使用rebase。

感谢@torek的一些帮助,我有办法实现自动化。修改脚本,如下所示:

#!/bin/bash

# editor=$(git config --get core.editor);
# editor=${editor:-${VISUAL:-${EDITOR:-vi}}};
for sha in $(git log --format=format:%H master..branch-in-question -- file/path)
do
  sha=${sha:0:7}
  sed -i "s/pick $sha/edit $sha/" $@
done

# $editor $@

(如果您想在运行rebase之前修改todo文件,请取消注释editor行。)

然后,启动rebase为:

GIT_SEQUENCE_EDITOR=/path/to/script.sh git rebase -i

这将自动更改命令从pickedit所有提交输出的命令,而无需自己手动更改第一次提交。

这两个版本的脚本都不允许您自定义运行的命令来计算要使用的提交,但如果这是一个问题,您可以传入一个环境变量以允许这样的自定义。