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の理解を深めるほど、ソース管理がしやすくなると思います。
まだ試したことがない方はぜひ試してみてください。

blog-page_footer_336




blog-page_footer_336




-Tools
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

【Unity】Standard Assetsでエラーが出た時の対応

1 はじめに2 Standard Assetsのエラー2.1 修正方法3 さいごに4 おすすめ書籍 はじめに こんにちは、suzukiです。本日はunityのStandard AssetsをImpor ...

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

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

暗号資産(仮想通貨)の取引で損益が発生するパターン

1 はじめに2 暗号資産の利益が発生するパターン2.1 暗号資産を現金で売却した場合2.2 暗号資産を暗号資産で交換(購入)した場合2.3 取引所などから暗号資産を付与された場合(エアドロップ)2.4 ...

ToDoアプリ5選

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

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

GCP無料枠×Theiaでいつでもコーディング

1 はじめに2 Theiaとは?3 GCPのセットアップ3.1 無料枠の利用を開始3.2 GCEインスタンスの作成3.2.1 1 f1-micro インスタンス(1 か月あたり、バージニア州北部を除く ...

フォロー

blog-page_side_responsive

2018年1月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。