私の以前の回答に追加し、強制が他の貢献者のローカルリポジトリを本当に台無しにする可能性があるという事実に対処するためにgit push
、git 1.8.5 (2013 年第 4 四半期) には新しいオプションが表示されます。
git push --force-with-lease
このスレッドでそのオプションの起源を参照してください。
origin
' ' で、検査のためにフェッチした後に強制または削除しようとしているブランチに何かが発生した場合、他の人の作業が失われる可能性があります。
ブランチを巻き戻して再構築するという決定に気付いていない誰かが、ブランチをリベースするためにフェッチしてから、リベースの結果に置き換えるためにプッシュするまでの間に、ブランチにプッシュしようとする可能性があります。
make these pushes safer
必要に応じて、ユーザーが次のことを " git push
"伝えられるようにすることができます。
「ブランチ」の値がまだこのオブジェクトにあるという仮定に基づいて、強制/削除しています。
その前提が成り立たなくなった場合、つまり、このプッシュの準備を開始してからブランチに何かが起こった場合は、先に進まず、このプッシュを失敗させてください。
コミット 28f5d17--force-with-lease
で完全なドキュメントを見ることができます
--force-with-lease
特に指定がない限り、現在の値が合理的なデフォルトと同じであることを要求することにより、更新されるすべてのリモート参照を保護します。
今のところ、「何らかの妥当なデフォルト」は暫定的に「更新されるリモートの参照用に持っているリモート トラッキング ブランチの値」として定義されており、そのようなリモート トラッキング ブランチがない場合はエラーになります。
それはそのオプションの「リース」部分を説明しています:
" force-with-lease
": リベースされた履歴がどうあるべきかを決定するためにフェッチしたときに参照のリースを取得したと想定し、リースが壊れていない場合にのみプッシュバックできます。
これはすでにテストされており、「git.git での調理について (2013 年 8 月 7 日; 水 28 日)」で言及されています。
ちなみに、通常の「must fast-forward」をオーバーライドするプッシュは、次のように でクックされている「force-with-lease
」オプションを使用して行われましnext
た。
$ git fetch ko next
$ anchor=$(git rev-parse --verify FETCH_HEAD)
$ for remote in ko repo gph github2
do
git push --force-with-lease=refs/heads/next:$anchor $remote next
done
注: " git push --force-with-lease
" は、プッシュを強制 (または早送り) する必要があるかどうかを報告するように教えられています。
したがって、このコマンドは git 2.8 (2016 年 3 月) での出力でより詳細になります。
push: の ref ステータス レポートを修正しました--force-with-lease
プッシュ オプションでは、--force--with-lease
より詳細なステータス情報が得られません--force
。
特に、出力は、参照が強制的に更新された場合でも、参照が早送りされたことを示しています。
Git 2.13 (Q2 2017) で説明されているように、そのオプションが無視/バイパスされることに注意してください。