あなたはファイルを過去の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の取り消しも上手く使いつつ、コード開発の効率を上げてみてください。
【転職実績No.1👑】年収アップと自由な働き方を実現したいならITエンジニア転職!
こんな希望はありませんか?
- もっと年収アップできる仕事がしたい
- 時間や場所に縛られず自由に働きたい
- 専門スキルで手に職をつけたい
という方は、ITエンジニア転職がおすすめです
テックキャンプなら、完全未経験🔰でも大丈夫!プログラミング学習〜エンジニア転職支援、副業案件獲得まで個別にサポートします👌
さらに給付金活用で受講料最大70%OFF!※
※2020年12月時点 3.テックキャンプ エンジニア転職は経済産業省の第四次産業革命スキル習得講座の認定も受けており、条件を満たすことで支払った受講料の最大70%(最大56万円)が給付金として支給されます
興味がある方は、以下よりIT転職のプロにキャリアのお悩み相談から始めてみましょう!