4

例えばリモートリポジトリにpushした後にうっかり git commit --amend や rebase してcommitのhashが変えてしまった場合は仕方がなくpullするか、git push -f するなどあまりgitの使い方的に良くない状態にしてしまう事をする羽目になってしまうと思います。

このようなケースの時の対処法で例えばgit commit --amendやrebaseを取り消すなどリポジトリを上記のような状態にせずに解決する方法はありますか?

ozw_sei
  • 551
  • 5
  • 14

1 Answers1

1

git commit --amend や rebase を取り消してしまって良いのであれば、例えば git reset --hard origin/master のように resetコマンド を使って現在のブランチをリモートレポジトリのmasterに戻してしまえば commit --amend, rebase はなかったことになります。

もし手元で行っているまだコミットしていない変更を失いたくないということであれば、--soft あるいは --mixed でワーキングツリーを維持しつつ HEADorigin/master に戻してからコミットすればよいかと思います。もし、push の後に行った rebase (commit --amend) よりも前のコミットを失いたくないということであれば、 git reset --hard ORIG_HEADrebase の直前のコミットの状態に戻ることもできます。

yunabe
  • 756
  • 5
  • 9
  • ありがとうございます。確かにそれで解消はできますが、消したCommitの変更が消えてしまうのが辛いですね... – ozw_sei Jan 13 '15 at 07:40
  • 消したCommitの変更とは何のことでしょう...手元の変更が維持したいなら reset --soft--mixed で戻した後コミットし直せば良いですし, 直前のコミットが commit --amend, rebasepush 後にした他のコミットは残しておきたい場合なら reset ORIG_HEAD で解決できますが。 – yunabe Jan 13 '15 at 08:07
  • ありがとうございます。前者の意図で説明不足で申し訳ありませんでした。 – ozw_sei Jan 13 '15 at 08:26
  • 上のコメントを回答に反映しておきました。 – yunabe Jan 13 '15 at 12:30