あなたはファイルを過去のcommitまで戻したい、ということはありませんか?
私も以前はgitやSource Treeの使い方がよくわからず、ファイルを変更しすぎてとにかく昔のcommitまで戻したいという時に、とても苦戦しました。
しかし、この記事を読むことで、あなたはgitの仕組みを理解して自信を持ってコミットの取り消しができます。
また、Source Treeのスクリーンショットものせて解説するので、Source Treeを使ってる方も理解することができます。
初心者でも必ず原理から理解できるように解説していきますので「なんとなく使ってる」という方も必見です。
git commit IDの調べ方
gitコマンドでcommitを打ち消したり、元に戻したりする場合は、commit IDを調べなければいけません。
commit IDとはcommit一つ一つを識別するための番号であり、打ち消すcommitを指定するために必要です。
以下のようにターミナルに入力してgit コマンドを実行します。
git log --graph
次のように表示されるかと思います。
* commit 1bbc11ff093b200c984c250a2afd3765abc3a12d | Author: ホーク | Date: Tue Nov 22 00:48:52 2016 +0900 | | コミットメッセージ2 | * commit cae705d423fee1254ea293641a5972786091bf6f | Author: ホーク | Date: Tue Nov 22 00:48:25 2016 +0900 | | コミットメッセージ |
ログがたくさん出てきてくるかと思いますが、終了したい場合は、キーボードでqを入力しましょう
commitの右に書かれているアルファベットと数字の組み合わせ(上の例では、1bbc11ff093b20….の文字)
がcommit IDになります。ですが実際に必要なのは、4~6桁で大丈夫です。
gitコマンドでコミットを打ち消したり、戻ったりする場合にcommit IDが必要になるので事前に確認しておきましょう。
reset
ある特定のcommitまで戻りたい時には、git resetを使いましょう。
resetでよく使われるものとして、
- hard
- mixed
の2種類があります。(softというのもありますが、mixedと似ているのでここでは割愛します)
ここで、hardとmixedでは機能が大きく違うことに気をつけましょう。
- hardはコミットがなかったことになり、自身のPCのファイルの内容も元に戻る
- mixedはコミットがなかったことになるだけで、自身のPCのファイルの内容は戻らない
特にhardを使った場合、ファイルの変更が元に戻ってしまい、それを再び取り消すことはできません。
ですので、reset hardを使う際は十分に気をつけましょう。
hard
「ファイルを書き換えすぎて全然動かなくなってしまった…とにかくファイルを前に戻したい」
このような時は、reset hardを使いましょう。
reset hardの動作を図にすると以下のようになります。
gitコマンドでは次のようにしてreset hardが出来ます。
git reset --hard CommitID
Commit IDを省略すると直近のcommitが自動的に選ばれます。
SourceTreeではまず、対象のコミットを選んで右クリックして、
「このコミットまで(ブランチ名)を戻す」をクリック
「モード: Hard」を選んで、「OK」
mixed
「同じようなコミットをしまくってログを汚くしてしまった…最終的なファイルはこれでいいけど、コミットを修正したい…」
このような時は、reset mixedを使いましょう。
reset mixedの動作を図にすると以下のようになります。
gitコマンドでは次のようにしてreset mixedが出来ます。
git reset --mixed CommitID
SourceTreeではまず、対象のコミットを選んで右クリックして、
「このコミットまで(ブランチ名) を戻す」をクリック
「モード: Mixed」を選んで、「OK」
revert
「ずいぶん前のコミットだけ取り消したい…だけどそこまでresetで戻るわけにはいかない…」
このような時は、revertを使いましょう。
revertの動作を図にすると以下のようになります。
gitコマンドでは次のようにしてrevertが出来ます。
git revert CommitID
SourceTreeではまず、対象のコミットを選んで右クリックして、
「コミット適用前に戻す」をクリック
この記事のハッシュタグ
特定のファイルだけ前のコミットに戻す
「特定のファイルだけ、前のバージョンに戻したい…」
そんな時は、checkoutを使いましょう。
checkoutという通常はブランチの切り替えで使われますが、実は特定のファイルを限定して切り替えることもできるのです。
gitコマンドでは次のようにします。
git checkout CommitID ファイル名
SourceTreeでは、特定のコミットを指定した後に、下部でファイルを右クリックして、「コミットまで戻す」をクリックします。
まとめ
commitを取り消すのは最初は不安になるかもしれませんが、reset,revertそれぞれでどのような動作が起こるか理解できれば、不安になる必要はありません。
また、Source Treeを使ってる方もどのように操作することで取り消しができるかわかったかと思います。
gitを自在に操って、commitの取り消しも上手く使いつつ、コード開発の効率を上げてみてください。
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。