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

拉里·N

我的问题的概况:

我想编写一个脚本,以将最后n次提交的历史记录更改今天,例如:./myscript.sh 5最后5次提交提交日期更改今天

通过此链接,我可以:

  1. 最后一次提交的日期设置当前日期
  2. 设置的日期最后一次提交任意日期
  3. 设置一个日期任意提交任意或当前日期

因为我要更改的是最后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并完成工作,就无需打开编辑器。我该怎么做(在脚本中)


在答案的帮助下,这是我的最终脚本:

#!/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
吉里·克雷姆瑟(Jiri Kremser)

如上所述这里

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

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

例:

GIT_SEQUENCE_EDITOR="sed -i -re 's/^pick /e /'" git rebase -i

但是您也可以使用一些bash / python /任何脚本代替。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

git删除某些提交后的远程历史记录

来自分类Dev

git:合并分支但保留提交历史记录

来自分类Dev

检查未提交的更改的历史记录

来自分类Dev

使用LibGit2Sharp截断GIT提交历史记录

来自分类Dev

在不更改SHA的情况下将文件和提交历史记录从一个git分支移至另一个

来自分类Dev

如何从git历史记录中提取提交?

来自分类Dev

从git历史记录中删除未使用的资产

来自分类Dev

使用Git强制文件历史记录关联

来自分类Dev

使用git filter-branch时,它会复制我的提交历史记录并创建重复的文件。我该如何摆脱呢?

来自分类Dev

更改git历史记录中所有提交的时区

来自分类Dev

如何批量自动更改git历史记录中的部分提交消息

来自分类Dev

提交显示在历史记录中,更改不在文件中,也不显示在单个文件的提交历史记录中

来自分类Dev

为什么使用git rebase -i对提交进行重新排序不会破坏历史记录?

来自分类Dev

如何更改共同历史记录中的提交?

来自分类Dev

使用当前的.gitignore使Git重建历史记录

来自分类Dev

如何使用git svn重写/重新排序/压缩svn提交历史记录?

来自分类Dev

如何使用GitHub API获取任何分支中仅一个文件的提交历史记录?

来自分类Dev

使用rebase重写Git历史记录

来自分类Dev

Git在过去的提交中更改了用户的凭据,而不更改历史记录(提交的日期)

来自分类Dev

历史记录更改后,如何拉git分支?

来自分类Dev

存储git之类的提交更改历史记录

来自分类Dev

如何将贡献者更改合并到上游但忽略提交历史记录日志

来自分类Dev

如何使用Hadoop 2.x提交Hadoop流作业并检查执行历史记录

来自分类Dev

使用git filter-branch时,它会复制我的提交历史记录并创建重复的文件。我该如何摆脱呢?

来自分类Dev

如何在不提交更改的情况下从git历史记录中删除文件?

来自分类Dev

在脚本中使用Interactive的Shell历史记录扩展

来自分类Dev

如何消除提交及其与git历史记录所做的更改?

来自分类Dev

使用BFG清理git历史记录

来自分类Dev

尝试使用 curl 将特定日期的提交历史记录到原始 json 文本文件中。自、直到和分页的问题?

Related 相关文章

  1. 1

    git删除某些提交后的远程历史记录

  2. 2

    git:合并分支但保留提交历史记录

  3. 3

    检查未提交的更改的历史记录

  4. 4

    使用LibGit2Sharp截断GIT提交历史记录

  5. 5

    在不更改SHA的情况下将文件和提交历史记录从一个git分支移至另一个

  6. 6

    如何从git历史记录中提取提交?

  7. 7

    从git历史记录中删除未使用的资产

  8. 8

    使用Git强制文件历史记录关联

  9. 9

    使用git filter-branch时,它会复制我的提交历史记录并创建重复的文件。我该如何摆脱呢?

  10. 10

    更改git历史记录中所有提交的时区

  11. 11

    如何批量自动更改git历史记录中的部分提交消息

  12. 12

    提交显示在历史记录中,更改不在文件中,也不显示在单个文件的提交历史记录中

  13. 13

    为什么使用git rebase -i对提交进行重新排序不会破坏历史记录?

  14. 14

    如何更改共同历史记录中的提交?

  15. 15

    使用当前的.gitignore使Git重建历史记录

  16. 16

    如何使用git svn重写/重新排序/压缩svn提交历史记录?

  17. 17

    如何使用GitHub API获取任何分支中仅一个文件的提交历史记录?

  18. 18

    使用rebase重写Git历史记录

  19. 19

    Git在过去的提交中更改了用户的凭据,而不更改历史记录(提交的日期)

  20. 20

    历史记录更改后,如何拉git分支?

  21. 21

    存储git之类的提交更改历史记录

  22. 22

    如何将贡献者更改合并到上游但忽略提交历史记录日志

  23. 23

    如何使用Hadoop 2.x提交Hadoop流作业并检查执行历史记录

  24. 24

    使用git filter-branch时,它会复制我的提交历史记录并创建重复的文件。我该如何摆脱呢?

  25. 25

    如何在不提交更改的情况下从git历史记录中删除文件?

  26. 26

    在脚本中使用Interactive的Shell历史记录扩展

  27. 27

    如何消除提交及其与git历史记录所做的更改?

  28. 28

    使用BFG清理git历史记录

  29. 29

    尝试使用 curl 将特定日期的提交历史记录到原始 json 文本文件中。自、直到和分页的问题?

热门标签

归档