2014年2月4日火曜日

Gitでのrevertとresetのまとめ

revertとreset

参照元:https://www.atlassian.com/ja/git/tutorial/undoing-changes?_escaped_fragment_=revert

Gitのコマンドであるrevertresetは非常に似たコマンドです。どちらもコミットを戻すコマンドで、オプションや引数も基本的に同じです。そこでその二つの細かな違いをまとめてみました。

revertとresetの違い

revert
・ある特定のバージョンまで戻して、その戻したことも記録としてコミットする。
・コミットを戻したことが記録として残るので安全。
・revertを行うと、特定のバージョンまで戻すパッチを自動生成してコミットする。
・共有リポジトリのコミットを戻す場合は極力revertを使用する。
・revertの引数にはコミットを指定するハッシュ文字列もしくはタグ名などを指定する。
・書式 git revert <コミット>
まとめ
・コミットを戻したことを記録として残したいならrevert

・ファイルの内容まで戻したいならrevert

reset
・ある特定のバージョンまで戻して、それまでの記録を削除する。
・かなりの記録を消すためややこしくなることもある。
・git reset --soft HEAD^ で直前に行ったコミットを取り消すことができる。
・変更内容も含めて取り消すには--hardを使用する。
・resetは引数としてコミットのハッシュ文字列やタグ名は一般的には指定しない。
・変わりに以下のオプションを指定する。
         ・--soft HEAD の位置のみを変更する。インデックス、ワーキングツリーには影響なし。
          ・--mixed (またはオプションなし) HEAD の位置とインデックスを変更する。ワーキングツリーには影響なし。 
          ・--hard HEADの位置、インデックス、ワーキングツリーをすべて変更する。
まとめ
・何もなかったかのようにコミットを戻したいならreset
・コミットしたという記録を消したいならreset
・resetの方が汎用性が高い
  • この記事をシェアする

  • このエントリーをはてなブックマークに追加
  • このブログの更新をチェックする

  • follow us in feedly