1. ホーム
  2. ギット

[解決済み】gitの履歴から特定のリビジョンを削除する方法とは?

2022-04-17 21:11:26

質問

gitの履歴がこのようになっているとします。

1 2 3 4 5

1~5は別リビジョンです。1、2、4、5を残したまま、3を削除する必要があります。どうすればいいのでしょうか?

削除するリビジョンの後に数百のリビジョンがある場合、効率的な方法はありますか?

どのように解決するのですか?

リビジョン3と4を1つのリビジョンにまとめるには、git rebaseを使用します。リビジョン 3 の変更を削除したい場合は、対話型リベースモードで edit コマンドを使用する必要があります。変更を1つのリビジョンにまとめたい場合は、squash を使用してください。

私はこのsquashのテクニックをうまく使っていますが、これまでリビジョンを削除する必要があったことはありません。git-rebase ドキュメントの "コミットの分割" を読めば、うまくいけば十分理解できるはずです。(あるいは他の誰かが知っているかもしれません)。

から git ドキュメント :

そのまま保持したい一番古いコミットから開始します。

git rebase -i <after-this-commit>

現在のブランチにある、指定したコミットより後のすべてのコミット(マージコミットは除く)がエディタに表示されます。このリスト内のコミットは好きなように並べ替えることができ、また削除することもできます。リストはだいたいこのような感じになります。

<ブロッククオート
pick deadbee このコミットのワンライン
pick fa1afe1 次のコミットのワンライン
...

git-rebase はこの記述を見ずにコミット名 (この例では "deadbee" と "fa1afe1") を見るので、この名前を削除したり編集したりしないでください。

コマンド "pick" をコマンド "edit" に置き換えることで、そのコミットを適用した後に git-rebase を停止させ、ファイルやコミットメッセージを編集してコミットを修正し、リベースを続行できるようになります。

2つ以上のコミットを1つにまとめたい場合は、2つ目以降のコミットで "pick" コマンドを "squash" に置き換えてください。2 つのコミットの作者が異なる場合、squash されたコミットを最初のコミットの作者に帰属させます。