Tools

Gitでやっちまったときに使えるコマンド

投稿日:2018年1月22日 更新日:

はじめに

Gitコマンドで失敗してしまうこともあると思います。
今回はそんなときに私が使うコマンドをまとめていきたいと思います。

コミットを修正したい

コミットしたけど、修正したい。
またはコミットメッセージが不適切で修正したい、という時はあると思います。
そういう時にamendオプションを使用することで、直前のコミットを修正することができます。

ただ、すでに直前のコミットをプッシュ済みの場合、amendしたコミットはすでにリモートにあることになっているので、Force Pushしなくてはいけません。

Force Pushは、複数の人と共同で作業していたりすると面倒なので極力使わない方が良いかと思います。

コミットを戻したい

コミットしたけど、元に戻したい。
また、最新のコミットをテストせずに本番にあげたらエラーが起こり、すぐに元に戻したいことがあると思います。(私は何度かあります笑)
そういう時はrevertを使うことをオススメします。

後ほど出てくるresetと似ていますが、こちらは「元に戻した」ログを残すことができます。
特別な理由がない限り、「元に戻したログ」はあっても問題ないかと思います。
(一緒に開発している人にも分かりやすいです。)

基本的には直前のコミットを元に戻すので、直前のコミットのIDを調べます。

このaaaaabbbbbbbcccccccdddddになります。
だいたい前3文字くらい指定すればよいので、このコミットをなかったことにします。

こうすると、新たに「元に戻したコミット」が生成され、実際のファイルも元に戻っているかと思います。

複数のコミットをrevertする

複数のコミットを打ち消す場合も、基本は直前のコミットをrevertしていくのがよいかと思います。
ただ、毎回打ち消しログができてしまうのが嫌な方は、下記のような方法もあるようです。
(こちらの記事を引用させていただきました。)

git revert で複数コミットを打ち消す

まずは打ち消したいコミットをrevertします。
no-editをつけることでエディタが立ち上がらなくて済みます。)

その後、rebase -iで対象の打ち消しコミットを統合します。

すると3つのコミットが統合されます。

コミット自体をそもそもなかったことにしたい

逆にそもそもコミット自体をなくすこともできます。
個人的には、普通にやっていたらそこまで必要になる場面はないかと思っていますが、
私自身遭遇したのは、コミットしたら違うブランチだった、という時です。
(集中力が欠けています。)

複数ブランチを行ったり来たりしているとたまにやってしまいます。
そもそもそのブランチにこの修正をコミットしたくないし、本来のブランチに持っていきたい。。。resetはコミット自体をなくすことができますが、主に使うのはsofthardの2つの方法です。

  • reset --softは、コミットはなくしますが、修正差分は残してくれます。
  • reset --hardは、コミットも修正差分もなくします。

上記の私のケースですと、コミットは消したいが、差分は別のブランチに持っていきたいので、以前の記事で解説しましたstashと併用して、下記のように実施します。

これで差分が戻ってくるので、あとは1度stashして別ブランチに移動します。

これで元のブランチに戻って来ました。

ちなみにhardの場合は、

になります。

reset –hardした差分を元に戻したい

まさに先日やってしまったことです。
(ある意味これを一番書きたかった。)

別ブランチにコミットしてしまい、「あー、やっちまった。切り替えなきゃ」と思います。
あの時、大量の差分があったため、一から修正し直すのは面倒でした。
ただ、何を思ったか(集中力が切れていたと思います。)、reset --hardしてしまいました。

もちろん差分もなかったことになります。
私は焦りました。またあの修正をしないといけないのか、と。
とりあえずGoogle先生に聞いてみたところ、なんと復旧させる方法がありました!

git reset –hardした内容を取り消す (git reset –hard, reflog, HEAD@{x}, 取り消してしまったコミットを元に戻す)

reset --hardすると、git log上からログが消えてしまいます。
ただ、reflogに記録が残っています。
reflogはまだちゃんと説明ができませんが、HEADの位置が動いたコマンドなどを記録しているようです。

reset --hardした後も、ちゃんとその記録を確認することができます。
上記の記事のサンプルを引用させていただきました。)

あとはこのHEAD@{1}まで戻して上げれば良いです。
これもgit reset --hardで実施します。

これでコミットが復活したので、再度git reset --softから実施しました。

さいごに

上記でまとめた他にも様々な便利技があります。
Gitの理解を深めるほど、ソース管理がしやすくなると思います。
まだ試したことがない方はぜひ試してみてください。

page_footer_300rect




page_footer_300rect




-Tools
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

ToDoアプリ5選

デザインの個性が現れるToDoアプリ5選!!

ToDoアプリ 1 はじめに2 Upper3 Wunderlist4 To:day5 Clear6 SWIPES7 さいごに はじめに こんにちはー!デザイナーのnottyです。 4月から新社会人とし ...

Gitの初期設定と便利な設定

1 はじめに2 初期設定2.1 ユーザ情報の設定3 便りな設定4 Gitの基礎知識4.1 configは3段階4.2 現在の設定を確認する4.3 設定ファイルの保存場所5 参考6 さいごに はじめに ...

Gitの便利なコマンド

1 はじめに2 cherry-pick2.1 使い方3 stash3.1 使い方3.2 退避した作業の一覧を見る3.3 退避した作業を戻す3.4 退避した作業を消す3.5 退避した作業を元に戻すと同時 ...

AppLink

page_side_300rect

アプリ情報

私たちは、目標を達成したい方を応援する、TODOアプリもリリースしております。
下記のアイコンから無料でダウンロードできます。

フォロー

follow us in feedly
2018年1月
« 12月 2月 »
 123456
78910111213
14151617181920
21222324252627
28293031 

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。 下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。