シェルスクリプトで* n *コミットのgit履歴(コミット日)を変更する

ラリーN

私の問題の全体像:

私がするスクリプトを書きたい歴史に変更に最後のn個のコミットのを今日たとえば、:./myscript.sh 5変更された日付コミットへの最後の5つのコミットの今日

このリンクから、私は次のいずれかを行うことができます。

  1. 日付を設定し、最後のコミットをする現在の日付
  2. 日付を設定し、最後のコミットをする任意の日付
  3. 日付を設定し、任意のコミット任意または現在の日付

私が欲しいのは、1つだけでなく最後のn個のコミットの履歴を変更することなので、3番目の手法を使用する必要があり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
ジリ・クレムサー

ここで説明されているように

インタラクティブリベース$EDITORは、コミットリストのデフォルト開きますと呼ばれるGIT_SEQUENCE_EDITOR環境変数でオーバーライドすることもできるため、呼び出しをインターセプトして、この変数をスクリプトで使用する必要があります

実行:GIT_SEQUENCE_EDITOR=<script> git rebase -i <params>あなたは<script>、標準的なリベースコミットリストを含むファイルへのパス:単一の引数を受け入れる必要があります。インプレースで書き換えて終了する必要があります。その後、通常のリベース処理が行われます。

例:

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

ただし、代わりにbash / python / whateverスクリプトを使用することもできます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

変更のコミット履歴のようなgitの保存

分類Dev

git履歴内のすべてのコミットのタイムゾーンを変更する

分類Dev

特定の以前のコミットに戻り、git履歴を変更しない

分類Dev

履歴(コミットの日付)を変更せずに、過去のコミットでユーザーの資格情報を変更します

分類Dev

Gitの履歴の途中でコミットを元に戻す

分類Dev

Git-履歴からコミットを削除する

分類Dev

既存のgit履歴で単一のコミットを複数のコミットに分割する

分類Dev

Git:以前のすべての履歴なしでコミットをチェリーピックする方法

分類Dev

古いgit履歴を最初のコミットに結合する

分類Dev

gitコミット履歴を日付順に並べ替える

分類Dev

分岐したコミットからファイルの変更履歴を確認する方法

分類Dev

コミット日ではなく、gitプッシュ履歴の日付を確認するにはどうすればよいですか?

分類Dev

git repo全体のコミット履歴で文字列の変更を検索するにはどうすればよいですか?

分類Dev

スクリプトでコミット親を介してGit履歴をフォローする同じコミットを2回訪問する

分類Dev

gitのコミット日を変更することは可能ですか?

分類Dev

Git:履歴コミットからファイルを削除する方法は?

分類Dev

これまでのすべてのgitコミットを単一のコミットに変換し、その履歴をすべて消去します

分類Dev

Git:2回前のコミットを履歴に追加します

分類Dev

サブツリーのコミット履歴に参加する

分類Dev

限られたコミット履歴をリモートGitにプッシュする

分類Dev

マージはブランチのコミット履歴を変更できますか?

分類Dev

コミット履歴の検閲

分類Dev

変更をコミットせずにgit履歴からファイルを削除するにはどうすればよいですか?

分類Dev

Gitで自分のコミット履歴のみを表示するにはどうすればよいですか?

分類Dev

Githubのコミット履歴を編集することは可能ですか?

分類Dev

githubのすべてのコミット履歴を削除する方法は?

分類Dev

コミットを削除するにはどうすればよいですか?それはgit履歴から変更されますか?

分類Dev

マスターのコミット履歴を同期して開発する

分類Dev

gitで特定の変更をコミットする方法

Related 関連記事

  1. 1

    変更のコミット履歴のようなgitの保存

  2. 2

    git履歴内のすべてのコミットのタイムゾーンを変更する

  3. 3

    特定の以前のコミットに戻り、git履歴を変更しない

  4. 4

    履歴(コミットの日付)を変更せずに、過去のコミットでユーザーの資格情報を変更します

  5. 5

    Gitの履歴の途中でコミットを元に戻す

  6. 6

    Git-履歴からコミットを削除する

  7. 7

    既存のgit履歴で単一のコミットを複数のコミットに分割する

  8. 8

    Git:以前のすべての履歴なしでコミットをチェリーピックする方法

  9. 9

    古いgit履歴を最初のコミットに結合する

  10. 10

    gitコミット履歴を日付順に並べ替える

  11. 11

    分岐したコミットからファイルの変更履歴を確認する方法

  12. 12

    コミット日ではなく、gitプッシュ履歴の日付を確認するにはどうすればよいですか?

  13. 13

    git repo全体のコミット履歴で文字列の変更を検索するにはどうすればよいですか?

  14. 14

    スクリプトでコミット親を介してGit履歴をフォローする同じコミットを2回訪問する

  15. 15

    gitのコミット日を変更することは可能ですか?

  16. 16

    Git:履歴コミットからファイルを削除する方法は?

  17. 17

    これまでのすべてのgitコミットを単一のコミットに変換し、その履歴をすべて消去します

  18. 18

    Git:2回前のコミットを履歴に追加します

  19. 19

    サブツリーのコミット履歴に参加する

  20. 20

    限られたコミット履歴をリモートGitにプッシュする

  21. 21

    マージはブランチのコミット履歴を変更できますか?

  22. 22

    コミット履歴の検閲

  23. 23

    変更をコミットせずにgit履歴からファイルを削除するにはどうすればよいですか?

  24. 24

    Gitで自分のコミット履歴のみを表示するにはどうすればよいですか?

  25. 25

    Githubのコミット履歴を編集することは可能ですか?

  26. 26

    githubのすべてのコミット履歴を削除する方法は?

  27. 27

    コミットを削除するにはどうすればよいですか?それはgit履歴から変更されますか?

  28. 28

    マスターのコミット履歴を同期して開発する

  29. 29

    gitで特定の変更をコミットする方法

ホットタグ

アーカイブ