2013-12-16 51 views
7

これは単純である必要がありますが、git-scmでは見つかりません。コミットを元に戻す方法と、多くのコミットを元に戻す方法

私はパブリックプロジェクトにたくさんのコミットをしてきましたが、私の仕事はすべて悪いです。私がやったことのすべてを取り除きたい。私はローカルでコミットしたばかりのものもあれば、「元マスター」にプッシュしたものもあります。

最初(週前)コミット私はこれらすべてが離れて行くようにしたい最新のe82401b ...

ていると... bdbad86です。私は1つを元に戻そうとしました。

git status 
# On branch master 
# You are currently reverting commit e82401b. 
# (all conflicts fixed: run "git revert --continue") 
# (use "git revert --abort" to cancel the revert operation) 
  1. 私はこのこの元に戻すを終了する方法を見つけ出すことはできません。
  2. 私は別々にコミットする必要はありません、私はすべてそれらを吹き飛ばしたいです。

答えて

4

あなたの仕事は、あなたが悪いコミットは、レポの歴史の中で連続的な範囲を形成するということです。それ以外の場合は、もっと複雑にする必要があります。あなたの履歴は次のようになります:

e82401b - (master, HEAD) My most recent private commit 
... 
bc2da37 - My first private commit 
cf3a183 - (origin/master) My most recent bad public commit 
... 
292acf1 - My first bad public commit 
82edb2a - The last good public commit 

私たちがしたいことは、まだ公開していないコミットを吹き飛ばすことです。今のあなたの視野を

git reset--hard origin/master 

git reset --hard cf3a183 

同等に(そしてより読み):あなたは、次のコマンドを使用して(あなたの変更は消えてしまいますと、回復不能考慮すべきであると注意を)これを行うことができますリポジトリはorigin/masterのビューに同意します。あなたは悪い公開変更を元に戻し、コミットを復帰として公開したいと考えています。これらの命令は、単一の復帰コミットを作成するためのものです。

あなたはa後(ことに注意!)とで終わるをコミットし、bをコミット、など、で始まるすべてのコミットを元に戻すgit revert --no-commit a..bを使用することができます。復帰はあなたがコミットするためにステージングされます。だから、ここで、私たちはどうなる:

git revert --no-commit 82edb2a..HEAD 

または、同等:

git revert --no-commit 292acf1^..HEAD 

HEADが今origin/masterと同じ場所を指していることを思い出し。

revertコマンドを実行した後で変更を準備してコミットする準備が整ったので、単純なgit commit -m "Reverting those bad changes I accidentally pushed and made public"を実行してください。

+0

ありがとう、これは私が必要とした情報の種類です。もう1つの質問:(マスター、HEAD)または(原点/マスター)情報を取得するにはどうすれば、2つのコマンドをいつ実行するかを知ることができます。 –

+1

@Pat最も簡単な方法は、この情報を一目で把握するために 'git log'の別の形式を設定することです。使用するフォーマットについては、[here](https://www.kernel.org/pub/software/scm/git/docs/git-log.html)を参照してください。良いスタートベースは次のようなものです: 'git log --pretty ="%h%Cgreen%d%Creset%s%%%Cblue(%cr) "' –

0

以前のコミットでリポジトリを設定することができます。それ以降のすべての変更は削除されます。それが原点--force githubの使用Gitのプッシュにプッシュした後

gitの

を--hardリセット

訪問私はinterjected誰もの間にコミットしていないことをここに仮定していHow do you roll back (reset) a Git repository to a particular commit?

+2

この回答で今後起こるGoogle社員にとっては、あなたが起源にプッシュした後は絶対にしないでください。 (http://git-scm.com/docs/git-rebase/#_recovering_from_upstream_rebase)それは他の人の人生を非常に挑戦的にすることができます。 – zmccord

関連する問題