ステージに追加した変更を取り消すresetコマンドの使い方

GitHub
パグ
パグ

誤った修正ファイルをステージに追加してしまった

ワークツリー内で作業をしてステージに追加(add)した後に、その変更を取り消したい場合があります。

そんな時にはgit resetコマンドを利用することで修正前の状態に戻すことができます。

resetコマンドの種類

よく利用されるgit resetコマンドの種類についてご紹介していきます。

git reset HEAD ファイル名
ステージに追加されている指定したファイルの変更を取り消す

git reset HEAD index.html

git reset HEAD ディレクトリ名
ステージに追加されている指定したディレクトリの変更を取り消す

git reset HEAD dir

git reset HEAD .
ステージに追加されているすべての変更を取り消す

git reset HEAD .
Point!

git resetコマンドはステージから指定した変更内容を削除するだけなのでワークツリー内のファイルには変更ありません。

ワークツリー内のファイルに対しても変更を取り消したい場合はgit checkoutコマンドを使用する必要があります

ワークツリー内の変更を取り消したい場合は下記を参照

ステージの変更を取り消す

実際にワークツリー内のindex.htmlファイルを変更してステージに追加(add)してから取り消す作業を行っていきます。

ファイルを変更したらgit statusコマンドで変更があることを確認します。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:  //詳細①
  (use "git restore --staged <file>..." to unstage)
        modified:   index.html
※コードの見方
黄・・・入力したコマンド
青・・・ログインユーザー
紫・・・コメント
その他・・・コマンドのレスポンス

詳細①
コミットできる変更がステージに追加されていることがわかる。

$ git reset HEAD index.html
Unstaged changes after reset: //詳細①
M       index.html

詳細①
ステージから指定したファイルindex.htmlの変更が取り消されたことがわかる。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)  
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html  //詳細②

no changes added to commit (use "git add" and/or "git commit -a")

詳細②
ワークツリー内にステージに追加可能な変更されているファイルindex.htmlがあることがわかる。

ワークツリー内の変更も取り消す場合はcheckoutコマンドも使用して変更を取り消す必要がある。

既にリポジトリにコミット(commit)している場合は取り消し不可

git resetコマンドはローカルリポジトリの状態に戻すコマンドです

ローカルリポジトリに既にリポジトリにコミット(commit)していない状態であればステージ内にローカルリポジトリの状態をコピーしてくることができるので、結果的に追加した内容を取り消すことができます。

そのため、既にローカルリポジトリにステージ内の変更をコミット(commit)してしまった場合は今回ご紹介するコマンドではで修正することはできません。

HEADについて
イタチ
イタチ

ところでHEADってなに?

HEADとは、現在自分がいるブランチの最新のコミットの状態を指しています。

その為、下記のコマンドは最新のコミットの状態にリセットするという意味になります。

git reset HEAD index.html 

タイトルとURLをコピーしました