web-dev-qa-db-ja.com

自分のブランチをリベースしてプッシュを強制する

私だけが使用するブランチをリベースしてプッシュを強制しても大丈夫ですか?そして、後でこのブランチをマスターにマージした後で問題が発生しますか?

これを説明するいくつかの状況:

  1. マスターがいるので、機能を追加する必要があります。
    • git pull Originマスター
    • git checkout -b new_feature
    • 私のブランチ内でいくつかの変更を行います
    • git pull-オリジンマスターをリベース-中間マージコミットをしたくないので
    • マスターブランチに変更がある場合、現在の状態のコミットの履歴をリベースします
    • git Push Origin new_feature -f-履歴は現在の機能ブランチとリモート機能ブランチで異なるため、強制的にのみプッシュできます。

私はそれをマスター機能でマージしません。これは、このブランチに対してその後マージ要求が作成されるため、このアクションは、例として別のチームメンバーによって実行されているためです。

そして、私は自分のブランチで誰もコミットせず、自分のブランチで作業することは絶対にないので、私はフォースプッシュが受け入れられることを理解しています。

  1. いくつかのコミットを押しつぶしたい2つ目の状況:
    • git pull Originマスター
    • git checkout -b new_feature
    • git commit -m "tst1"
    • git Push Origin new_feature
    • git commit -m "tst2"
    • git rebase -i HEAD〜2リベース後
    • git Push Origin new_feature -f

その後、gitlabでマージ要求を送信し、マスターでマージします。

5
Antony Makaruk

フォースプッシュは基本的に、「古いリモートブランチが存在することを忘れて、私があなたに伝えたことを単にプッシュする」と言っています。リモートリポジトリのブランチで最終的に何が発生するかについては、次のように同等です。

  • 何かする
  • 新しいブランチをプッシュする
  • 歴史を変えるようなことをする
  • 強制プッシュブランチ


  • 何かする
  • 歴史を変えるようなことをする
  • 新しいブランチをプッシュする

したがって、ブランチが本当に1つのクライアントリポジトリでのみ使用され、リモートサーバー上のブランチのコピーが基本的にバックアップとして使用されている場合、強制プッシュは問題ありません。

リモートサーバーのブランチが複数のクライアントリポジトリから(自分自身または他のユーザーによって)使用されている場合、強制プッシュは簡単に混乱を招く可能性があります。これらの他のクライアントリポジトリの1つがサーバーからプルすると、gitはブランチのバージョンをサーバーバージョンとマージしようとします。これにより、履歴の重複や削除されたコードの偶発的な再導入などの望ましくない結果が生じる可能性があります。

4
Peter Green