ワークツリー, コミットを両方戻す方法 (checkout しているブランチも一緒に)

種類状態
ワークツリー変更
コミット(HEAD)変更
ブランチ変更

現在 checkout しているブランチも指定した位置に戻す。

主に不要だった作業をもとに戻したい場合に行う。

git reset --hard [ブランチ名|ハッシュ|タグ]

git reset --hard b4e7c7

ワークツリー, コミットを両方戻す方法 (ブランチは変更したくない場合)

種類状態
ワークツリー変更
コミット(HEAD)変更
ブランチそのまま

現在 checkout しているブランチはそのまま一時的に HEAD を指定した位置に戻す。

一時的に過去のコミットを調査したい場合や、master/main/develop ブランチなどから新しいブランチを作成したい場合に使用する。

git checkout [ブランチ名|ハッシュ|タグ]

git checkout b4e7c7

ワークツリーを変えずに特定のコミットに戻す方法

種類状態
ワークツリーそのまま
コミット(HEAD)変更

この操作を行うと git diff したときに前の地点からの変更が unstaged(コミット,ステージ指定ない状態)として確認できる。

wip コミットをたくさん作成したあとで本当に必要な変更だったかを確かめて、コミットし直すときに便利。

git reset --mixed [ブランチ名|ハッシュ|タグ]

git reset --mixed b4e7c7

HEAD を変えずにワークツリーを特定の状態に戻す方法

種類状態
ワークツリー変更
コミット(HEAD)そのまま

.をつけると HEAD をそのままの状態でワークツリーのみ変更できる。

別のブランチで行った変更を作業中のワークツリーに持ってきたいときに便利。

git checkout [ブランチ名|ハッシュ|タグ] .

git checkout b4e7c7 .

.だとすべての git で追跡されたファイルが checkout 先の内容に置き換わるが、特定のファイルやディレクトリのみを指定することもできる

例えばある別のブランチ feature/new-util で変更された src/util/new-util.ts を現在開発中の機能でも使いたいときは

git checkout feature/new-util src/util/new-util.ts