Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[git] 戻したい時よく使っているコマンドまとめ

More than 1 year has passed since last update.

はじめに

コミットのバージョンを戻す、ステージングしたものを編集内容ごと取り消す、ファイルのステージングを取り下げる...と戻すにも色々あります。

整理も兼ねて業務でよく使っているコマンドをまとめます。

目次

  • 編集内容を取り消したい(addする前)
  • ステージングを取り消したい
  • コミットのバージョンを戻したい
  • 特定のファイルのみ、コミットのバージョンを戻したい
  • リモートリポジトリのコミットのバージョンを戻したい

編集内容を取り消したい(addする前)

git checkout [ファイル名]
ファイル名のところを.にすると、ステージング前の全ての変更内容がなくなる。

ステージングを取り消したい

git reset [ファイル名]
 ステージングを取り下げる。編集内容は残る
ファイル名を指定しないと全てのステージングが取り下げられる。

git checkout HEAD -- [ファイル名]
ステージしたファイルを最後にコミットした状態に戻す
つまり編集内容は残らない。

git reset --hard HEAD
編集・ステージングいずれの変更内容を取り消し、最後にコミットした状態に戻す

checkoutとresetの違いを説明しようとするとそれだけで記事が1つ書けそうなので今回はやりません。
ただざっくりとだけ説明すると、
大きく分けて違いは二つ

  • 作業ディレクトリの未保存の有無をチェックする機能
    checkout:ある。うまくやれば未変更のファイルを全て更新してくれる
    reset --hard:ない。容赦無く上書きされる

  • HEADの移動の仕方
    checkout:HEADそのものが移動。HEADが付いていたブランチに変化はない
    reset:HEADの示すブランチの方が移動

上の説明の図があります。
7.7 Git のさまざまなツール - リセットコマンド詳説

コミットのバージョンを戻したい

git reset --hard [コミットid]
コミットidはgit logコマンドで調べて、戻りたいコミットのidを指定してあげる。

※非推奨(個人的に)
git revert [コミットid]

reset --hardが戻った以降のコミットをなかったことにする(コミットログが消える)のに対して、revertはコミットログを残したまま戻る。
そのままpushしたりmergeされたりすると、反映されていない変更履歴が残ってしまい、メンバーを混乱させることがある。不要になったコミット履歴に気をつけましょう。

特定のファイルのみ、コミットのバージョンを戻したい

git checkout [コミットid] [ファイルパス]

リモートリポジトリのコミットのバージョンを戻したい

結論から言うとそれ用のコマンドはない。
なので以下の手順で
リモートリポジトリを消す→ローカルのを反映させる
ということをする。

念のためバックアップを作成
git push origin master:master_bak

remoteのmasterを一旦消す。ローカルを一つ戻す。

pushして反映させる。
git push -f origin HEAD^:master

無事に戻せたのを確認できたら

git push origin :master_bak
でバックアップを消す。

以前やらかした時に助けられました...:pray:

参考
Gitでリモートリポジトリを巻き戻す | @tmtms のメモ

おわりに

resetとrevertよりもresetとcheckoutの違いの方が難しかった。

rch1223
間違ったこと言ってたら教えてください
iridge
O2OやFinTechソリューションの企画・開発・運用をしています。
https://iridge.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away