Git 上級操作

Git の基本操作を習得した後、上級操作を使うと、コードベースをより効率的に管理・最適化することができます。

以下に、よく使われる上級操作とその詳細な説明を示します。

  • 対話式ステージング:ステージする変更をブロック単位で選択し、コミット内容を細かく制御します。
  • Git Stash:作業の進捗を一時的に保存し、タスクの切り替えを容易にします。
  • Git Rebase:あるブランチの変更を別のブランチの上に移動し、コミット履歴を直線的に保ちます。
  • Git Cherry-Pick:特定のコミットを選択して現在のブランチに適用します。

1、対話式ステージング(Interactive Staging)

git addこのコマンドは、ファイルまたはファイルの一部を選択的にステージング領域に追加できます。複雑な変更を処理するときに非常に便利です。

  • 使用git add -p:ステージする変更をブロック単位で選択します。
git add -p

このコマンドを実行すると、Git はファイルの変更をブロック単位で表示します。各ブロックをステージするかどうかを選択できます。一般的なオプションは次のとおりです:

  • y:現在のブロックをステージ
  • n:現在のブロックをスキップ
  • s:現在のブロックを分割
  • e:現在のブロックを手動で編集
  • q:ステージングを終了

2、Git Stash:作業の進捗を一時的に保存

git stashこのコマンドを使用すると、現在の作業ディレクトリの変更を一時的に保存し、他のブランチに切り替えたり、他のタスクを処理したりできます。

現在の作業の進捗を保存:

git stash

保存された進捗を表示:

git stash list

最新の保存済みの進捗を適用:

git stash apply

最新の保存済みの進捗を適用して削除:

git stash pop

特定のスタッシュを削除:

git stash drop stash@{n}

すべてのスタッシュをクリア:

git stash clear

3、Git Rebase:リベース

git rebaseこのコマンドは、あるブランチの変更を別のブランチの上に移動するために使用します。これにより、コミット履歴を直線的に保ち、マージ時の競合を減らすことができます。

現在のブランチを指定ブランチにリベース:

git rebase <branchname>

例えば、現在のブランチをリベースする先のmainブランチ:

git rebase main
  • 対話式リベース:
git rebase -i <commit>

対話式リベースでは、リベース中にコミットを編集、削除、または結合できます。よく使われるオプションは次のとおりです:

  • pick:コミットを保持
  • reword:コミットメッセージを変更
  • edit:コミットを編集
  • squash:現在のコミットを前のコミットと結合
  • fixup:現在のコミットを前のコミットと結合し、コミットメッセージを保持しない
  • drop:コミットを削除

4、Git Cherry-Pick:コミットのチェリーピック

git cherry-pickこのコマンドを使用すると、特定のコミットを選択して現在のブランチに適用できます。あるブランチから別のブランチに特定の変更を移植する必要がある場合に非常に便利です。

コミットをチェリーピック:

git cherry-pick <commit>

例えば、abc123コミットを現在のブランチに適用します:

git cherry-pick abc123

チェリーピックの競合を処理:チェリーピック中に競合が発生した場合は、競合を解決した後、次のコマンドを使用してgit cherry-pick --continueチェリーピックを続行します。

操作例

以下は、これらの上級操作の使用方法を示す総合的な例です:

対話式ステージング:

git add -p

作業の進捗を保存:

git stash

保存された進捗を表示:

git stash list

保存された進捗を適用:

git stash apply

現在のブランチをリベースする先のmainブランチ:

git rebase main

対話式リベース、コミット履歴を編集:

git rebase -i HEAD~3

コミット履歴を編集します。例えば、コミットの結合や名前の変更などです。

チェリーピックfeatureブランチ上の特定のコミットをmainブランチへ:

git checkout main
git cherry-pick abc123
その他の拡張