2012-03-15 8 views
2

多くのチームメンバーがいるプロジェクトで作業しています。私たちは今、私たちの仕事の仕方を磨くように努めています。現在、すべての作業はintegrationブランチで行われ、数年前にはmasterに分岐しました。 1つの理由または別の理由で、約600のコミットがマスターブランチで行われ、統合に統合されず、統合で行われた約1200のコミットもマスターブランチにマージされません。すべてのリリースは統合ブランチから完全に除外されていますが、マスターブランチには1年に1度は触れられませんでした。安定したブランチとしてmasterブランチを使用したいと思いますが、そのためには、すべての変更をintegrationからマージして、変更された変更をマスターに保存しないようにする必要があります。gitの既にプッシュされているブランチからすべてのコミットを削除するには?

マスターブランチから「無効な」コミットを削除する無料の方法はありますか?あるいは、新しいリポジトリまたは現在の統合位置から離れた別の安定したブランチを作成するだけですか?

更新残念なことに、早送りおよびリモートブランチ削除は拒否されていますが、私はまだリポジトリホスティング担当者からの応答を待っています。私はそれが変わるのは簡単ではないと思っています。それは悲しいことに大企業です。

答えて

3

リモート削除を行うことができない場合は、最も簡単な方法は次のとおりです。TA-DA

git checkout integration 
cp -a . ../integration-source 
rm -rf ../integration-source/.git 
git checkout master 
mv .git ../integration-source 
cd ../integration-source 
git add --all 
git commit -m"massive commit to make master identical with integration" 
git push 
cd .. 
rmdir projectdirname 
mv integration-source projectdirname 

リモート削除を行うことができます場合は、次の

git push --force origin integration:master 
+0

残念ながら、更新された質問を参照してください動作しません。 –

+0

ああ、ダング。さて、私はもう少し複雑な代替のソリューションを提供しました:) –

+0

いいですが、統合にマスターをマージすることで、私たちが望んでいないすべてのコミットがもたらされます。しかし、まだ非常に素晴らしい解決策、+1: –

1

git reset --hardあなたのマスターブランチは、最初にインテグレーションブランチを作成したポイントに戻ることができます。それは、あなたが最初に分岐したときの状態にあなたを残し、本質的に将来のコミットをマスターに「削除」します。

その時点で、統合ブランチをmasterにマージするだけで、それらは同じになります。実際には、それは紛争のない早送りマージであると私は思うだろう。

元の分岐点を見つけるには、git merge-base master integrationを使用できます。詳細はthis Stack Overflow questionをご覧ください。

+0

は、残念ながら非早送りが拒否されて、私はまだ、彼らはしばらくの間、有効にすることができるかどうかの回答を待っています。これを行うと、他の人がプル/フェッチする際に問題はありますか? –

+0

私は早送りを強制することを躊躇します。彼らが引っ張ってみると、それは他の人の地元のレポをめちゃくちゃにする可能性があります。しかしそれが私の指摘でした。ブランチポイントにリセットして、統合ブランチからマスターにマージすると、早送りマージする必要があります。これを試しても失敗しましたか? – Brandan

+0

これは早送りとして報告されていますが、他の600件のコミットはすべて失われてしまいます。少なくとも私の仮定です:) –

関連する問題