使用shell脚本提交* n *更改git历史记录(提交日期)

问题描述 投票:1回答:2

我的问题的概况:

[我想将脚本编写到对today的最后n次提交的change the history中,例如:./myscript.sh 5会将最近5次提交的提交日期更改为< [今天。this link,我可以:

  1. 上次提交]的日期设置为当前日期] >>
  2. 上次提交
  3. 的日期设置为任意日期] >>
  4. 任意提交
  5. 的日期设置为任意或当前日期] >>
    因为我想要的是更改最后一个

    n commits

    的历史,而不仅仅是1,所以我必须采用第三种技术,该技术需要调用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"

您已经完成
git shell git-rebase git-rewrite-history
2个回答
1
投票
here所述。

Interactive rebase在提交列表上打开默认的$EDITOR。也可以通过名为GIT_SEQUENCE_EDITOR的env变量来覆盖它,因此您需要拦截该调用并在某些脚本中使用此变量

运行:GIT_SEQUENCE_EDITOR = git rebase -i。您应该接受一个参数:包含标准rebase提交列表的文件的路径。它应该就地重写它并退出。此后,通常会进行重新处理。


1
投票
将n个提交压缩为一个,无需重新设置交互基础...。甚至根本不重新设置基础。要压缩最后5次提交,您可以执行以下操作:

git reset --soft HEAD~5 git commit -m "some comment"

您已经完成
© www.soinside.com 2019 - 2024. All rights reserved.