2011-10-15 14 views
15

私はGitと変わった設定をしています。基本的に私が持っている:GIT:リモートリポジトリにプッシュされた複数のコミットをスクラッシュする方法は?

[client 1] <---> [remote repo] ----> [client 2] 

[クライアント1]私はコンパイルすることはできませんので、/私のローカルマシン上でプロジェクトをビルドし、基本的に私が働いている地元のレポです。

[クライアント2]は、ビルドするためのリモートサーバーです。

私は、私の会社のcvs中央リポジトリと同期するために、また[クライアント1]と[クライアント2]の間で同期するために、別のレポ[リモートリポジトリ]を持っています。

すべてのコンパイル/ビルドは[クライアント2]で行われるため、コンパイルやビルドのエラーを修正するために[クライアント1]に多くのトリビアルコミットがあります。

最後のコミットにエラーがあることがわかり次第、コミットが既にプッシュされ、リモートのレポから引き出されているため、すでにコミットしていません。

これらの(多くの)簡単なコミットを1つにスカッシュできますか?おかげさまで

答えて

24

まず、絶対にする必要がある場合を除き、まずは踏み潰したり、一般的に履歴を書き換えたりしないでください。 「些細な」コミットをすることは、プッシュされたコミットを潰す理由ではありません。彼らが滞在できるなら、彼らは滞在させてください。そして履歴を書き直すことはCVSではまったく簡単なことではないので、これらのコミットがCVSリポジトリに入り込んできたので、あなたはおそらくそれを使って生きるべきです。

gitリモートリポジトリの場合は、先に進んでください。ローカルリポジトリ(git rebase -iは簡単です)でコミットすることを知っていると思います。スカッシュの後、-f - 力のプッシュを押します。

12

あなたは、git rebase -iまたはgit merge --squashにコミットスカッシュSquash my last X commits together using Git

を参照してくださいしかし、あなたはすでに別のリポジトリにそれらを公開しているので、あなたは他人にそれを修正することができます。かなり厄介ですが、あなたが必要とするコマンドはgit push --forceです。

ただし、リモートリポジトリがすでにCVSと同期している場合は、それも修正する必要があります。他の開発者がすでにそれを取得している場合も同様です。

+0

答えに感謝します。申し訳ありませんが、私はmanojldsの答えを受け入れました。ちょうど彼がもう少し早いからです。なぜなら両方の答えがかなり類似しているからです – wei

関連する問題