作業のやり直しの例

スポンサーリンク

作業のやり直しは基本的にローカルリポジトリでの作業をやり直すときに使います。プライベート利用のリモートリポジトリを除いて、基本的にリモートリポジトリへすでにプッシュされているコミットをやり直してはいけません。

スポンサーリンク

コミットのやり直し (git commit --amend)

git commit --amendは直近のコミットをやり直すのに利用できます。直近のコミットをやり直すためには、通常のコミットのようにgit add等を行った後にgit commitではなく、git commit --amendとすると直近のコミット履歴にその内容が反映されます。その時のコミット内容に含めるべき内容についての間違えにすぐに気づいた時の修正に利用できます。

まず、以下のようなコミット履歴で例を示します。

コミットのやり直しとして、コミットメッセージを修正せずにコミットするファイルの追加や削除についての例を示します。
--amendオプションを利用するとコミットメッセージを修正するためのエディタが開きます。
--no-editオプションを利用するとエディタを開かず、コミットメッセージをそのままにコミット内容をやり直すことができます。
以下はfile3.1.txtを追加して、file3.txtを削除してコミットをやり直す例になります。

また、ファイルの内容を修正するのも同じようにできます。

コミットメッセージも修正したい場合は--no-editを使わずにgit commit --amendを利用します。
ただし、エディタが開くので、エディタの設定が行われていない場合は意図しないエディタが開く場合があるので注意が必要かもしれません。

エディタの設定は、例えば、以下のように設定できます。以下のコマンドはグローバル設定になります。

このコマンドで修正できるのは直近のコミットだけになります。コミットを修正するとハッシュ値が変更されます。直近より前のコミット修正はローカルリポジトリだけに存在する状況では行う可能性があるかもしれません。その場合はまた別のコマンドを利用することになり、その修正したコミットからパッチを再適用し直す必要があり、それらのハッシュ値はすべて変更されるでしょう。リモートリポジトリのコミットの修正を行うのは共同で作業をしている人の迷惑になるため、基本的に行うべきではありません(行うとしてもまず関係者全員の合意が必要になりますし、現実にはその判断を下すことができる地位や権限を持っていなければならないかもしれません)。

ステージしたファイルのやり直し (git reset)

ステージしたファイルのステージングをやり直ししたい場合はgit resetでステージングを取り消すことができます

まず以下の状態でステージングを行ったファイルがあるとします。

この状態でgit resetを行うとgit addのステージング操作を取り消すことができます。

また、git reset <ファイル>で個別にファイルのステージングを取り消すことができます。

ファイルへの変更の取り消し (git checkout <ファイル>)

ファイルをバージョン管理しているときにそのファイルをいろいろ変更したがステージングをする前にやっぱり変更する必要がないと思った場合、
git checkout <ファイル>でそのファイルに対しての変更した操作をなかったことにし、ファイルをリポジトリに保存した元の状態に戻すことができます。

ファイルをステージングに上げた場合でもgit resetでステージングを取り消して、
git checkout <ファイル>でファイルを元に戻すことができます。