Git Reset/Rebaseを知る

Gitを使用していると、コミットやステージングの操作を誤った場合、訂正が必要になることがあります。このガイドでは、git addgit commit を訂正するための手順を詳しく説明します。

git add を訂正する

  1. 未追加のファイルを追加: 訂正する前に、訂正したいファイルを再度 git add コマンドでステージングエリアに追加します。

    git add ファイル名
  2. ステージングエリアのクリア: すべてのファイルを一度にステージングエリアから削除する場合は、以下のコマンドを使用します

    git reset
    
  3. コミットを修正: ファイルがステージングエリアに正しく追加されたら、訂正したいコミットに対して git commit —amend コマンドを使用してコミットを修正します。

    git commit --amend
    
  4. エディタでコミットメッセージを編集: git commit —amend を実行すると、エディタが開き、コミットメッセージを編集できます。必要な変更を加えたら保存して閉じます。

    訂正したコミットをプッシュ: コミットを訂正したら、リモートリポジトリに変更をプッシュします。ただし、訂正したコミットが既にリモートにプッシュされている場合、注意が必要です。プッシュを強制する必要があるかどうかを検討してください。

git commit を訂正する

  1. 最新のコミットを訂正: 直前のコミットを訂正したい場合、以下のコマンドを使用します。’

    git commit --amend
    

    これにより、最新のコミットが訂正され、エディタが開いてコミットメッセージを編集できます。

  2. 過去のコミットを訂正: 過去のコミットを訂正する場合、git rebase -i コマンドを使用して対話的なリベースを実行し、訂正したいコミットを選択します。

    git rebase -i HEAD~n
    

    ここで n はコミットの数を表します。エディタが開き、コミットのリストが表示されます。訂正したいコミットの行の頭に edit を追加し、保存して閉じます。

  3. コミットを訂正: コミットがステージングエリアに追加されたら、訂正したい内容を行います。

  4. 訂正を確定: 訂正が完了したら、以下のコマンドを使用してリベースを続行します。

    git rebase --continue
    
  5. エディタでコミットメッセージを編集: リベースが完了したら、エディタが開き、コミットメッセージを編集できます。必要な変更を加えたら保存して閉じます。

  6. 訂正したコミットをプッシュ: 訂正したコミットがリモートにプッシュされている場合、プッシュを強制する必要があるかどうかを検討してください。

git checkout .

git checkout . コマンドは、Gitを使用してワーキングディレクトリ内の変更を取り消すために利用されるコマンドです。このコマンドを実行すると、以下のような効果があります。

  • ワーキングディレクトリ内のすべてのファイルとディレクトリが、直前のコミットの状態に戻ります。
  • ステージングエリアに追加されていた変更が削除され、変更がステージングエリアに含まれない状態になります。

以下は、git checkout . コマンドの基本的な使い方です。

git reset HEAD~1 # 現在のコミットを取り消し、変更内容を一時的に退避させます。
 
git checkout . # git add する前の状態に戻します。これにより、ステージングエリアに追加されていた変更が取り消され、ワーキングディレクトリに戻ります。

このコマンドは、ワーキングディレクトリ内の変更をすべて取り消し、直前のコミット状態に戻します。特に、誤って git add したファイルや変更を元に戻すために便利です。

git reset

git reset コマンドは、コミット履歴に対する操作を行うためのGitコマンドです。主な使用ケースは、ステージングエリアとワーキングディレクトリにおける変更の管理です。

  1. --soft: コミットを取り消し、ステージングエリアの変更は保持される。

    git reset --soft HEAD^
  2. —mixed (デフォルト): コミットとステージングエリアの変更を取り消し、ワーキングディレクトリの変更は保持される。

    git reset HEAD
  3. —hard: コミット、ステージングエリア、ワーキングディレクトリの変更をすべて取り消す。

    git reset --hard HEAD