Interactive rebase在提交列表上打开默认的$EDITOR
。也可以通过名为GIT_SEQUENCE_EDITOR
的env变量来覆盖它,因此您需要拦截该调用并在某些脚本中使用此变量
运行:GIT_SEQUENCE_EDITOR = git rebase -i。您应该接受一个参数:包含标准rebase提交列表的文件的路径。它应该就地重写它并退出。此后,通常会进行重新处理。
我的问题的概况:
[我想将脚本编写到对today的最后n次提交的change the history中,例如:./myscript.sh 5
会将最近5次提交的提交日期更改为< [今天。从this link,我可以:
n commits
git rebase -i
并打开编辑器。我想编写一个脚本来自动执行此任务。((将最近5次提交的提交日期更改为今天):git rebase -i HEAD~5
然后打开编辑器
pick 81888d1 committed 9 months ago pick 7363124 committed a month ago pick eea43f7 committed yesterday pick 48c3e85 committed yesterday pick a62cbec commit recently # change all the `pick` to `edit`
关闭编辑器,重复以下步骤5次
GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)" git rebase --continue
完成。
约束:因为我提前知道我在编辑器中所做的部分是将所有pick
关键字替换为edit
,所以我希望它以静默方式完成。只需键入./myscript.sh 5
并完成工作,就不会打开任何编辑器。我该如何做((in script)
?
借助答案,这是我的最终脚本:
#!/bin/bash # wish design: #./myscript.sh [number of days] #./myscript.sh 5 # make the last 5 commits's commit dates to today declare -r integer_pattern="^[0-9]+$" if [[ $1 =~ $integer_pattern ]]; then count=$1 GIT_SEQUENCE_EDITOR="sed -i -re 's/^pick /e /'" git rebase -i "HEAD~$count" for ((i=0; i<count; i++)); do GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)" git rebase --continue done else echo "invalid argument [number of days] $1" fi
我的问题的概况:我想编写一个脚本来将最后n次提交的历史记录更改为今天,例如:./myscript.sh 5会将最后5次提交的提交日期更改为今天。 ...如here所述。Interactive rebase在提交列表上打开默认的
$EDITOR
。也可以通过名为GIT_SEQUENCE_EDITOR
的env变量来覆盖它,因此您需要拦截该调用并在某些脚本中使用此变量运行:GIT_SEQUENCE_EDITOR = git rebase -i。您应该接受一个参数:包含标准rebase提交列表的文件的路径。它应该就地重写它并退出。此后,通常会进行重新处理。
示例:
GIT_SEQUENCE_EDITOR="sed -i -re 's/^pick /e /'" git rebase -i
但是您也可以使用一些bash / python /任何脚本来代替。将n个提交压缩为一个,无需重新设置交互基础...。甚至根本不重新设置基础。要压缩最后5次提交,您可以执行以下操作:
git reset --soft HEAD~5 git commit -m "some comment"
您已经完成
Interactive rebase在提交列表上打开默认的$EDITOR
。也可以通过名为GIT_SEQUENCE_EDITOR
的env变量来覆盖它,因此您需要拦截该调用并在某些脚本中使用此变量
运行:GIT_SEQUENCE_EDITOR = git rebase -i。您应该接受一个参数:包含标准rebase提交列表的文件的路径。它应该就地重写它并退出。此后,通常会进行重新处理。
git reset --soft HEAD~5
git commit -m "some comment"
您已经完成