2016-09-13 19 views
1

私はほぼ千重いコミットしてリモートのgitリポジトリを持っているが、それは次のとおりです。変更されたコミットをリモートのgitリポジトリにプッシュする最も効率的な方法は何ですか?

最近
C1 -> C2 -> C3 -> ... -> C949 -> C950 -> ... -> C1000 

、私はその中には、C950をコミット見つけ、私はレポに大規模なバイナリ・オブジェクトを追加しました。 git filter-branch --index-filterコマンドを使用してローカルリポジトリのファイルを削除しました。今、私のローカルリポジトリは、次のようになります。

C1 -> C2 -> C3 -> ... -> C949 -> C1001 -> ... -> C1051 

私はリモートリポジトリ上の私のコミットを元に戻し、その後、変更をプッシュすることができます知っています。しかし私の大きなコミットについては、私はリモートリポジトリに自分の変更をプッシュする最も効率的な方法について確かめたいと思います。

更新1:今まで、リモートレポジトリのpush-forceに行ってください。しかし、ポイントは私のリモートレポがnonFastForwardマージを許さないということです。この問題を解決する他の方法はありますか?

+0

あなたはすでに保存する可能性があるよりも多くの時間を費やしました。 gitがいくつかの重複したトラフィックを送信すると、新しいチップを強制的に押し込むだけです。一般的なケースでは、削除する可能性のあるいくつかのケースで節約するよりも多くの時間とトラフィックが必要です。 – jthill

答えて

2

変更されたコミット(C1001 - > .. - C1051)を以前にプッシュしたレポに書き直そうとしているとき(つまり、C950 - > .. - C1000)プッシュを強制する必要があります。

リモート・リポジトリーのFastForward構成については、構成を変更するためにリモート・リポジトリーに直接アクセスする必要があります。

+0

rebase-i – hsalimi

+0

ありがとうございます - -force-with-leaseスイッチは、gitの観点から、他の誰かがリポジトリを変更したので、私は最初にプルする必要があります! – hsalimi

+0

そうです。あなたが以前にプッシュしたときに強制的にプッシュしたい場合、gitは--force-with-leaseを使ってこれを実行させません。それは普通の仲間です。なぜなら、あなたが次に--forceをしたら、他のdevsは自分の仕事を失い、それはあまり親切ではないからです。 –

1

大きなオブジェクトの中にはgitが使用していないものがあると、それらは自動的に削除され、リモートとは共有されません。

ちょうど使っ使用の参照をプッシュ:

git push origin master 

(リモートおよびブランチで、必要に応じて、原点とマスターを交換してください)。

これは、マスターに含まれているオブジェクトとコミットのみをプッシュしますが、これは大きなコミットの場合には当てはまりません。

+0

ローカルブランチリポジトリにはサーバー上に見つからないコミットが含まれているので、このコマンドは失敗すると思います。リモートリポジトリにも同じことが言えます。その結果、私はこのコマンドが失敗すると思います。 – hsalimi

+0

プッシュのポイントは、新しいオブジェクトをサーバーに送信することです。履歴が「早送り」ではない(したがって、現在の既存のリポジトリと互換性がない)ということを意味する場合、これはfilter-branchコマンドの主な問題です。 ref更新を強制したい場合は 'git push --force'を使います。 – blue112

+0

私は 'git push --force'を使用しましたが、これはエラーメッセージです:remote:error:早送りのrefs/heads/masterを拒否しています(最初に取り出すべきです) https:// path/to /あなた/ url.git ! [リモート拒否] master - > master(早送りではない) エラー:「https://path/to/your/url.git」への一部の参照をプッシュできませんでした – hsalimi

関連する問題