混乱を回避するための最も簡単な方法は、サーバーに複数のディスクを与えることです。
これは厳しいものです。ファイルを削除すると、履歴からそれらを削除する必要があり、あまりにも、これはgit filter-branch
でのみ実行できます。このコマンドは、たとえばwo ULD履歴から<file>
を削除:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file>' \
--prune-empty --tag-name-filter cat -- --all
問題は、これがチームの全員が、新しいブランチバージョンにリセットするか、いくつかの深刻な頭痛を危険にさらす必要があります。つまり、SHA1ハッシュが書き換えられています。誰も作業が進行中でなく、トピックブランチを使用しているなら、それはすべて上質で良い。集中化が進んでいる場合や、チームが大規模である場合や、作業中に作業ディレクトリが汚れている場合など、混乱や混乱がなければ、これを行う方法はありません。あなたはかなりの時間をかけて、みんなのローカルを正しく動かすことができます。それはgit filter-branch
と書いてあります。あなたが計画を持っていることを確認して、チームがそれを理解し、進行中の重要な作業が失われたり混乱した場合に備えて、ローカルリポジトリをバックアップするようにします。
一つの可能な計画は次のようになります。
- は、進行中の自分の仕事のパッチを生成する
git diff > ~/my_wip
のようなものがチームを取得します。
- コミットされているが共有されていない作業のパッチを生成するチームを取得します。
git format-patch <branch>
- 実行。これが起こっている間、チームが引っ張らないことを知っていることを確認してください。
- チームに
git fetch && git reset --hard origin/<branch>
を発行するか、リポジトリを新しくクローンしてもらいますか?
git am <patch>
で以前にコミットされた作業を適用します。
- 進捗状況は
git apply
と入力してください。 git apply ~/my_wip
。他の回答に加えて
私はこのガイドを以前に使いましたが、コミットを破棄した後はどうなりますか?人々はすでにモンスターコミットを引っ張ってきた。起こりそうなことは、誰かが地元のコミットをしてからプッシュすると、マージが必要なことに気づくでしょう。それで彼らはマージしてプッシュし、モンスターのコミットは再び戻ってくるでしょう。どうすればこれが起こらないようにすることができますか?(質問する人に電子メールを送ることはうまくいかない!) – agentgonzo
不要なファイルを削除したら、.gitignoreファイルに追加することを常にお勧めします。そうすれば、Gitはそれらのファイルの追跡をやめ、再度押すことを防ぎます。 –
Sanhkaは、それらがプッシュされるのを防ぎません - それがコミットされるのを防ぎます。彼らがすでにコミットされているので、プッシュはそれらを元に戻すでしょう。 – agentgonzo