記事の目的
- 作業のやり直しについて記載
本文
- 行った変更を取り消すための基本的なツールについての説明
- 注意点:ここで扱う内容の中には「やり直しのやり直し」ができないものもある。
1.やり直し"--amend"
やり直しを行う場面としてよくあるもの
- コミットを早まりすぎて追加すべきファイルを忘れてしまった
- コミットメッセージが変になってしまった
--amend について
- このコマンドは、ステージングエリアの内容をコミットに使用します。
- コミットの直後にこのコマンドを実行したような場合、スナップショットの内容はまったく同じでありコミットメッセージを変更することになります。
もう一度やり直したい場合には **--amend** オプションをつけてもう一度コミットする。
$ git commit --amend
- いったんコミットした後、何かのファイルをステージするのを忘れていたのに気づいた場合
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
- 最終的に出来上がるのは一つのコミットです。2番目のコミットが、最初のコミットの結果を上書きするから。
2.ステージしたファイルの取り消し "git reset <file>"
・ステージングエリアと作業ディレクトリの変更に関する作業を扱う
ふたつのファイルを変更し、それぞれを別のコミットとするつもりだったのに間違えて git add * と打ち込んでしまった場合
問題点:「ファイルが両方ともステージされてしまった。」「ふたつのうちの一方だけのステージを解除するにはどうすればいいのか。」
$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md
git status が教えてくれる。
git reset HEAD <file> と書かれている。
アドバイスに従って CONTRIBUTING.md ファイルのステージの解除をする。
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working
directory)
modified: CONTRIBUTING.md
CONTRIBUTING.mdファイルは、変更されたもののステージされていない状態に戻りました。
3.ファイルへの変更の取り消し "git checkout --<file>"
・ファイルへの変更を取り消せる。
・直近のコミット時点の状態、あるいは最初にクローンしたり最初に作業ディレクトリに取得したときの状態に戻す。
・git status がやり方を教えてくれる
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working
directory)
modified: CONTRIBUTING.md
やり方が書いてあるので従ってみると
$ git checkout -- CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
"git checkout -- [file]"は危険なコマンドであることです。ファイルに加えた変更は全て消えてしまいます。そのファイルが不要であることが確実にわかっている時以外は、このコマンドを使わないようにしましょう。
・やりたいことが「ファイルに加えた変更はとっておきつつ、一時的に横に追いやっておきたい」のであれば"stash"やブランチを調べてみましょう。一般的にこちらの方がおすすめです。