読者です 読者をやめる 読者になる 読者になる

Git reset, Git checkout ステージングの取り消し、ファイル変更の取り消し

前記事 > git add, commit 後の履歴を git log で見る

「プログラマーじゃないけど Git 入門」

前記事で日本語が文字化けしていたのは、サンプルテキストが sjis で保存されていたからでした。utf-8 で保存すれば、git logの出力でも文字化けしません。

f:id:ausnichts:20170327132111p:plain

こんな感じで「日本語テキストを追加してみる」と表示されています。



git log のオプションを試してみる

git log をオプションなしで実行しますと、

f:id:ausnichts:20170318202212p:plain

上から(保存したファイル内容?)のチェックサム、ユーザ名、コミットした日付、コミットメッセージを表示ます。


-pオプションをつけますと、

f:id:ausnichts:20170327131817p:plain

その下に各コミットで変更された差分が表示されます。上の画像で言いますと、2回目のコミットで「日本語テキストを追加してみる」が書き加えられたことがわかります。


さらに、最上段の画像になりますが、-1(数字)をつけますと、直近のコミットからその数字分のコミットを表示します。


-statオプションは、

f:id:ausnichts:20170327134805p:plain

・
・
 sample.txt | 1 +
 1 file changed, 1 insertion(+)
・
・
 sample.txt | 4 ++++
 1 file changed, 4 insertions(+)

と、各コミットで変更された行数を表示します。


git reset でステージングエリアから解除する

git addした後のgit statusunstageの方法が示されています。

f:id:ausnichts:20170327150939p:plain

git reset HEAD sample.txtで、確かにgit addする前に戻ります。


git checkout でファイルの状態を戻す

ファイルへの変更を取り消して元に戻したい場合はどうするんでしょう?


それもgit statusに表示されています。上の画像の続きですが、

f:id:ausnichts:20170327152255p:plain

git checkout -- sample.txtで確かに変更前に戻ります。

ただし、Git のドキュメントにこう書かれています。

ここで理解しておくべきなのが、git checkout — [file]は危険なコマンドだ、ということです。 あなたがファイルに加えた変更はすべて消えてしまいます。変更した内容を、別のファイルで上書きしたのと同じことになります。そのファイルが不要であることが確実にわかっているとき以外は、このコマンドを使わないようにしましょう。
やりたいことが、「ファイルに加えた変更はとっておきつつ、一時的に横に追いやっておきたい」ということであれば、Git のブランチ機能 で説明する stash やブランチを調べてみましょう。一般にこちらのほうがおすすめの方法です。


次はブランチの勉強ですね。