最新の N 個の Git コミットを結合する方法

Git Commands

Git でのコミット スカッシングをマスターする:

プロジェクトに取り組んでいると、コミット履歴が多数の小さなコミットで乱雑になることがあります。これらのマイナーなコミットにより、変更を確認したり、プロジェクト履歴を理解したりすることが困難になる場合があります。

Git では、最後の N 個のコミットを 1 つのコミットにまとめて、よりクリーンで管理しやすい履歴を作成できます。このガイドでは、これを達成してバージョン管理をより効率的にするための手順を説明します。

指示 説明
git rebase -i HEAD~N 最後の N 個のコミットの対話型リベースを開始します。
pick インタラクティブなリベース中にコミットをそのまま維持します。
squash インタラクティブなリベース中にコミットを前のコミットと結合します。
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo リベース Todo リストの最初のコミットを除くすべてのコミットについて、「pick」を「squash」に自動的に置き換えます。
git rebase --continue 競合を解決した後、リベース プロセスを続行します。
git rebase --abort リベースプロセスを中止し、リベース開始前の状態に戻します。
HEAD~N 現在の HEAD の N 個前のコミットを参照します。

Git コミット スカッシングを理解する

最初のスクリプトでは、 最後の N 個のコミットの対話型リベースを開始します。インタラクティブ画面では、結合するコミットの「pick」を「squash」に置き換えます。このプロセスは、複数の小さなコミットを 1 つに統合するのに役立ち、コミット履歴がクリーンになり、管理しやすくなります。編集後、保存してエディタを閉じます。競合がある場合は、競合を解決して続行します。 。

2 番目のスクリプトは、スカッシュ プロセスを自動化する Bash スクリプトです。まず、コミット数 (N) が指定されているかどうかを確認します。それから、それは実行されます そして使用します リベース Todo リストの最初のコミットを除くすべてのコミットについて、「pick」を「squash」に置き換えます。これにより、ファイルを手動で編集することなく、複数のコミットを簡単に潰すことができます。最後に、次のようにしてリベース プロセスを続行します。 、必要な競合解決を自動的に処理します。

Git Rebase を使用して複数のコミットを 1 つにまとめます

Git コマンド

git rebase -i HEAD~N
# Replace N with the number of commits you want to squash
# In the interactive rebase screen that appears, change 'pick' to 'squash' (or 's') for the commits you want to squash
# Save and close the editor
# Edit the commit message if needed, then save and close the editor again
# If there are conflicts, resolve them and then run
git rebase --continue
# Your last N commits are now squashed into one commit

シェルスクリプトによるコミットスカッシュの自動化

Bash スクリプト

#!/bin/bash
if [ -z "$1" ]
then
  echo "Usage: ./squash_commits.sh <N>"
  exit 1
fi
git rebase -i HEAD~$1
# Automatically replace 'pick' with 'squash' for all but the first commit
sed -i '1!s/pick/squash/' .git/rebase-merge/git-rebase-todo
git rebase --continue

高度な Git スカッシュ手法

Git でコミットをスカッシュするもう 1 つの重要な側面は、プロセス中に発生する可能性のあるマージ競合を処理することです。複数のコミットを結合すると、異なるコミットからの変更が互いに競合する可能性があります。これらの競合を解決するために、Git には次のようなコマンドが用意されています。 どのファイルが競合しているかを確認し、 解決済みとしてマークします。競合を解決した後、次のようにしてリベースを続行します。 。

また、問題が発生した場合にリベースを中止する方法を知っておくと役立ちます。コマンド リベース プロセスを停止し、リポジトリをリベースが開始される前の状態に戻します。これにより、リベース プロセス中に加えられた変更を安全に元に戻すことができます。これらのコマンドを理解すると、複雑な Git 履歴を効率的に管理する能力が大幅に向上します。

  1. コミットのスカッシュとはどういう意味ですか?
  2. コミットのスカッシングとは、コミット履歴を簡素化するために、複数のコミットを 1 つのコミットに結合することを意味します。
  3. なぜコミットをスカッシュする必要があるのでしょうか?
  4. コミットを潰すと、特に小さなコミットが多数使用されている場合に、プロジェクト履歴がすっきりして読みやすくなります。
  5. インタラクティブなリベースを開始するにはどうすればよいですか?
  6. コマンドを使用する 、N を潰したいコミットの数に置き換えます。
  7. インタラクティブなリベースにおける「ピック」と「スカッシュ」は何を意味しますか?
  8. 「Pick」はコミットをそのまま保持しますが、「squash」はコミットを前のコミットと結合します。
  9. リベース中の競合を解決するにはどうすればよいですか?
  10. 使用 競合を特定し、手動で解決してから、 そして 。
  11. 何か問題が発生した場合にリベースを中止できますか?
  12. はい、使用できます リベースを停止し、前の状態に戻ります。
  13. コミットを潰すために Bash スクリプトを使用する利点は何ですか?
  14. Bash スクリプトはプロセスを自動化し、時間を節約し、手動エラーのリスクを軽減します。
  15. リベース内のコミットを自動的にスカッシュする方法はありますか?
  16. はい、スクリプトを使用してリベース Todo リストを変更します。 , 「ピック」を「スカッシュ」に自動的に変更できます。

Git コミット スカッシングのまとめ

Git でのコミットのスカッシュは、クリーンで読みやすいプロジェクト履歴を維持するための強力なテクニックです。インタラクティブなリベースを使用する場合でも、Bash スクリプトによる自動化を使用する場合でも、複数のコミットを 1 つのコミットに結合できるため、ログの管理が容易になります。競合を解決してリベースを中止する方法を理解すると、Git の習熟度が高まり、発生した問題に確実に対処できるようになります。これらのコマンドとメソッドをマスターすると、バージョン管理の実践が大幅に改善されます。