質問:
現在の状態から、あるコミットの時点でのスナップショットに戻すのってどうやればいいの?git log
をすると、こんなのが出力されるんだけど:
どうやってここから11月3日、つまりコミット0d1d7fc…に戻せばいいの?
回答1:
これは”元に戻す”がどういう意味かによるかな。
一時的に別のコミットに切り替える
もし一時的にそれに戻して、なんか作業して、また元に戻ってきたいのなら、望みのコミットをチェックアウトすればいい:
|
または、そこに戻してる間にコミットしたい場合は、そこにいる間に新しいブランチを作るべき:
|
元の場所に戻るには、もう一度あなたがいた支店をチェックしてください。 (If
ブランチを切り替えるときはいつものように変更を加えました。
必要に応じてそれらと一緒に。あなたはそれらを捨てるようにリセットすることができます。あなたは隠れて、
チェックアウトして、あなたと一緒に連れていってください。それらをブランチにコミットすることができます
そこに支店が必要な場合はそこに。)
##非公開のコミットをハード削除する
一方で、あなたが本当にやったことすべてを取り除きたいのであれば
それ以来、2つの可能性があります。 1つ、あなたが
これらのコミットは、単にリセットします:
#これにより、ローカルの変更はすべて破棄されます。
#コミットしたくない作業が残っている場合は、実行しないでください。
git reset --hard 0d1d7fc32
#あるいは、保存する作業がある場合:
git stash
git reset --hard 0d1d7fc32
git stash pop
#これは変更を保存し、リセット後にそのパッチを再適用します。
#マージの競合が発生する可能性があります。
#あなたがリセットしたコミットから変更されました。
面倒なことがあれば、あなたはすでにローカルの変更を投げ捨てましたが、
もう一度リセットすることで、以前の場所に戻ってください。
##新しいコミットでコミットされたコミットを元に戻す
一方、あなたが作品を発表した場合、おそらく
ブランチをリセットすると、効果的に履歴を書き換えられるからです。その場合、
あなたは確かにコミットを元に戻すことができます。 Gitを使うと、元に戻すことは非常に特殊です
意味:逆パッチでコミットを作成して取り消します。このようにして
履歴を書き換えないでください。
#これは3つの別々の復帰コミットを作成します:
git revert a867b4af 25eee4ca 0766c053
#それはまた範囲を取る。これは最後の2つのコミットを元に戻します:
git revert HEAD〜2..HEAD
#同様に、コミットハッシュを使用して一連のコミットを元に戻すことができます。
git revert a867b4af..0766c053
#マージコミットを元に戻す
git revert -m 1 <merge_commit_sha>
#ちょうど1つを得るには、 `rebase -i`を使って後でそれらを押しつぶすことができます
#または、手動で行うこともできます(リポジトリのトップレベルでこれを行うことを忘れないでください)
#HEADを変更せずに、あなたのインデックスと作業ツリーを目的の状態にする:
git checkout 0d1d7fc32。
#次にコミットします。あなたがやったことを説明する良いメッセージを書いてください
git commit
git-revert
マンページ
実際にはその説明で多くのことをカバーしています。もう一つの役に立つリンクは[this
git-scm.comブログ投稿でgit-revertについて議論する(http:// git-
scm.com/blog/2010/03/02/undoing-merges.html)。
あなたが結局元に戻したくないと決めたら、元に戻すことができます
(ここで説明したように)、または元に戻す前にリセットすることができます(前の
セクション)。
この回答は、この場合に役立ちます:
HEADを元の場所に戻す方法は? (分離された
head)
|
|
回答2:
作業コピーを最新のコミットに戻す
以前のコミットに戻し、変更を無視するには:
|
HEADは現在のブランチの最後のコミットね。
作業コピーを古いコミットに戻す
直近のコミットよりも古いコミットに戻すには:
|
元ネタは同じような質問のページ: SHAハッシュで以前のコミットに戻る方法?
回答3:
複雑でヤバい答えがたくさんあるけど、実際は簡単:
|
これは、HEADからコミットハッシュに戻ってすべてを元に戻すよ。つまり、すべてのコミットがその状態に戻ったかのように作業ツリー内のそのコミット状態を再び作成してる。。それから現在のツリーをコミットすると、「元に戻した」コミットと本質的に同等の新しいコミットをするよ。
(--no-commit
フラグは、すべてのコミットを一度に元に戻す - そうじゃければ範囲内の各コミットのコメントを入れるように促される、これはコミット履歴を不要な新しいコミットのゴミで汚しちゃうけど)
重要なのは、これは以前の状態にロールバックする安全かつ簡単な方法だってこと。履歴は壊されることなく、すでに公開されているコミットに使用することができる。
回答4:
僕にとっては(たぶん他の人にも)、一番いいのはGitリセットオプションだよ:
|
これは僕にとって最高の選択肢だった!シンプルで、速く、効果的!
注意: でも古いコミットのコピーを持っている他の人とブランチを共有している場合は、この方法は使わないこと!
あと、あんまりヤバくない方法がお好みの時は、
|