2012-04-05 9 views
2

私たちの中央gitリポジトリにいくつかの変更をプッシュし、その後すぐに、私は昔、今時代遅れ転がっ変更し、私はそれでマージを導入していたことを持っていたことに気づいた:私はその後、使用リベース後に新しい履歴をプッシュしますか?

before

をgitのは、この偽の親を取り除くためにリベース:

after

それから私は、原点にgit push -fでこれを押しました。それは「すべて最新」で答えます。

今私は中央リポジトリは、私がローカルに持っているものと一致することを期待します。しかし、私がcloneプロジェクトを新たにしたとき、私はまだ偽の親を持っています。悪い点は、gitがマージしたいということです。私がそれをやらせると、私は最新のコミットを2回(古いハッシュで1回、リベース後に1回)取得します。

私はマージせずに私が持っているものを押して、ちょうど私のリポジトリの状態を新しい状態として取るようにします(基本的に、すべてを拒否するにはリモート違い)?

または私はこの間違っているのでしょうか?私は、 "プロパティを読むときは..."を取り除き、上部の画像には赤い線全体を取り除きたい。

答えて

1

あなたはさまざまな方法でこの問題を解決することができます。 1つの方法は、リセット、隠し、コミットを使用して履歴をローカルに再構築することです。以下は、最後のコミット(最初のインポート...)を元に戻し、変更を隠します。

git reset --mixed HEAD^ 
git stash 

今あなたがABCD1234でのハッシュであると仮定すると、マージをした前に、あなたが持っていたコミットにご主人をリセットすることができ、「テストgitの。」コミット:

git reset --hard abcd1234 

今スタッシュを戻すと、再びそれをコミット:

git stash pop 
git add . 
git commit -m 'Initial import of the C++ client library.' 

今すぐ最終的にあなたの書き換えマスター押し上げる:

git push -f origin master 
+0

おかげで、それが働きました! 'stash'について知らなかった。私は 'receive.denyNonFastForwards'をプッシュを受け入れるように変更しなければなりませんでした(http://stackoverflow.com/a/1377930/143091)。 – jdm

+0

それはあなたのためにうまくいった! :) – ralphtheninja

+0

あなたが最初にプッシュしたのは、あなたがリベースした後にはうまくいかなかった理由です。意味をなさない – ralphtheninja

関連する問題