Bo2SS

Bo2SS

5 Git統合の使用禁止

39 | 集成ブランチへの強制的な push -f 操作の禁止#

-f /--force:強制的な更新

シナリオ:ローカルとリモートが fast-forwards 関係ではない場合、ローカルはリモートにプッシュすることは許されていませんが、git push -fコマンドを使用すると、ローカルをリモートに強制的に更新することができます。

デモ:リモートのコミットを強制的に削除します。

まず、現在のリモートのコミット履歴を確認してみましょう:

image

そして、ローカルのコミット履歴を確認してみましょう:

image

この時点で、ローカルのバージョンを以前のコミット(例:f21c98a)にリセットし、git reset --hard f21c98aを実行し、再びローカルのコミット履歴を確認してみましょう:

image

以降のコミット履歴が消えていることに気付きます。

この状態でプッシュを行ってみます:

image

単純に git push ではうまくいきませんが、-f を追加すると成功します。そして、リモートのコミット履歴を確認してみましょう:

image

いいえ!もしもあなたがリモートの別の開発者なら、ここでどのような感じになるでしょうか?

では、このような操作を防ぐためのメカニズムはありますか?自分で検索してみることができますが、Github と Gitlab はそれぞれ対応する保護メカニズムを提供しています。

📢さらに、git reflogを使用して削除したブランチを取り戻すこともできます。以下の画像の赤枠を参照してください:

image

そして、git reset --hard HAED@{n}を利用して復元できます~

40 | 集成ブランチへの変更履歴操作の禁止#

チーム内の共有ブランチでは rebase 操作を禁止します

例えば:

同僚 A は rebase を使用してコミットのメッセージを変更し、リモートにプッシュしました:

同僚 B は彼が変更する前に、すでに origin/temp ブランチをベースに test_rebase_inter ブランチを作成し、2 つの新しいコミットを提出しました:

この時、同僚 B は自分の更新をプッシュしようとすると問題が発生します。

そして、test_rebase_inter ブランチで開発している他の開発者も同じ問題に直面し、彼らは再び rebase を使用して処理する必要があります。これにより、不必要なトラブルが発生します。

または、同僚 A を見つけて元に戻すように依頼し、具体的な方法は前のセクションで言及した git reflog を参照してください。


rebase の適用シナリオの一つ:まだリモートにプッシュされていない場合、自分のローカルの複数のコミットを rebase を使用して 1 つのコミットにまとめ、それをプッシュします。

統合開発では、2 つのポイントを忘れないでください:push -f しないこと;リモートの履歴を変更しないこと。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。