/var/log/messages

Jan 23, 2014 - 2 minute read - Comments - Git

直近ではない remote に push してる commit の取り消し

公開している歴史を rebase とかで変更してはいけない。

ので、どうするかというとバージョン (commit) を特定してその時点の状態にファイルを巻戻してしまえば良いはず。git checkout で良いのかどうか。

$ git checkout <commit object の id> path

で、そのまま commit を作ってしまえば良いはず。

そんな対応をした訳ではないのでこんな書き方になっててスミマセン (誰

ちなみに svn だとリビジョン指定で以下なのかどうか。

$ svn update -r <revision number> path

TortoiseSVN 確認してみると Update to revision… というメニュー項目がありますね。おそらくはこれを使うはず。

追記

こんなこと書いてたら Git で巻戻し、な事案が発生しました。エントリの下書き見ながら作業をしようとしてたりなんかしてorz

つうか commit の粒度 (?) を小さくしておくとこんな時に便利ですね。

作業してみた

巻戻せない。ヤバいワケワカんない、って言ってたら巻戻す commit の ID 間違えてました。修正を盛り込んだヤツの id 指定しててそら駄目だろと。

さらに追記

上記、いくつか間違いがあるので訂正を。

まず Git ですが以下な歴史で

    A     B     C
--- o --- o --- o

C が HEAD で A の commit を巻戻す場合、同じファイルへの修正が B という commit にあったら B の修正も巻き戻りました。当り前ですね。

なのでこうした場合には patch を取得してアテるのが最適な方法なのだろうと思われます。でもどうやって patch 取得するんだろ。やっぱ無理かな。横着して結構微妙なメに蓬ったので diff 見ながら手で修正した方が安全かもしれません。

また、svn ですが、ログビューワから取り消す commit を指して右クリック後、Revert changes from this version を選択、が正しい方法でした。これもその後の歴史で修正入ってた場合、巻き戻ってしまうのかどうか。こちらは差分が小さかった上、diff もきちんと確認して commit を作ったので問題はないはずです (何処