git resetとgit revertの違いなど
昨今gitはGUIツールで使う人が多いと思いますが、コマンドレベルまでレイヤーを下げることでかゆい所に手が届いたりするんですね。
たとえば今やってる作業を一時的に保管しておきたいなどgit stashが便利です。これはコミットするほどでもない作業をブランチを変えたいなど止む終えない理由で残しておきたい時なんかに使います。
ところで最近知った機能にgit resetとgit revertの違いなんかがあります。両者は似たような機能なのでGUIツールなんかでは片方しかサポートしてないことがままありますが、この違いを知っとくとGUIツールを使うときなんかに何かといいかもです。
さてgit resetとgit revertの違いですが、両者ともコミットの状態をもとに戻したいという意味では同じです。ただresetが履歴を残さないで変更を巻き戻すのに対して、git reverの方は履歴はそのままで変更を戻すコミットを作成するという違いになります。
だったらgit resetだけあればいいじゃんか、って思うのですが、バージョン管理の性質上そうはいかないのです。
git revertは戻したいコミットも残した上で変更を元に戻したコミットを上に重ねるという意味になります。
なんでこんな回りくどい方法を取っているかというと、リモートリポジトリに変更の履歴が反映されてて他の人がそれを参照してたりすると大変なことになるので、極力コミットログを変更したくない時にrevertを使います。そうすれば今までの履歴に変更を巻き戻したという履歴が加わってそれがコミットされます。
人間の直観的にはresetのほうが正しい動きなんですけどね。
ちなみにGitHubDesktopでrevertを行うと戻したという履歴が残って、VisualStudioのチームエクスプローラーを使うとresetが内部的に呼ばれるため戻したという履歴は残りません。
git小ネタでした。
- 作者: 岡本隆史,武田健太郎,相良幸範
- 出版社/メーカー: 技術評論社
- 発売日: 2016/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: Travis Swicegood,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2009/08/12
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 305回
- この商品を含むブログ (101件) を見る