1. ホーム
  2. git

[解決済み] git push" でリモートファイルを強制的に上書きする

2022-02-19 12:32:24

質問

私は自分のローカルファイルをプッシュし、マージコンフリクトに対処することなく、リモートリポにそれらを持ちたいと思います。私のローカルバージョンをリモートバージョンより優先させたいだけです。

Gitでこれを行うにはどうしたらよいでしょうか?

どのように解決するのですか?

を使用して、ローカルリビジョンをリモートリポジトリに強制することができるはずです。

git push -f <remote> <branch>

(例 git push -f origin master ). を省く <remote><branch> を設定したローカルブランチはすべて強制的にプッシュされます。 --set-upstream .

ただ、他の人がこのリポジトリを共有している場合、彼らのリビジョン履歴は新しいものと衝突することに注意してください。そして、もし彼らが変更点以降のローカルコミットを持っていれば、それらは無効となります。

更新情報 : 余談を付け加えておこうと思いました。他の人がレビューするような変更を加える場合、その変更を含むブランチを作成し、定期的にリベースしてメインの開発ブランチと最新の状態に保つことは珍しいことではありません。他の開発者に、このようなことが定期的に起こることを伝えておけば、何を期待すればいいのかがわかるでしょう。

アップデート2 : 視聴者が増えてきたため、あなたの upstream は、フォースプッシュが発生します。

あなたのレポをクローンして、こんな風にいくつかのコミットを追加したとします。

            D-----Eトピック
           /
A----B----C 開発

しかし、後に development ブランチがヒットします。 rebase を実行すると、このようなエラーが発生します。 git pull :

オブジェクトを解凍します。100% (3/3), 完了しました。
レポロケーションから。
 * ブランチ開発 -> FETCH_HEAD
自動結合 <ファイル>
CONFLICT (内容)。<locations> のマージが競合しています。
自動マージに失敗しました。競合を修正し、結果をコミットしてください。

ここでは、コンフリクトを修正し commit しかし、そうするとコミット履歴がとても醜くなります。

       C----D----E----F のトピック
      / /
A----B--------------C' development

を使うのは魅力的に見えるかもしれません。 git pull --force が、そうするとコミットが滞留してしまうので注意が必要です。

            D-----Eトピック

A-----B-----C」開発

ですから、おそらく最良の選択肢は git pull --rebase . この場合、以前のようにコンフリクトを解決する必要がありますが、コミットする代わりに各ステップで git rebase --continue . 最終的には、コミット履歴がより良く見えるようになります。

            D'---E'トピック
           /
A----B----C' 開発

アップデート3: また --force-with-lease オプションは、quot;safety" 強制的に を押してください。 でCupcakeが言及しているように 回答 :

リースを使った強制プッシュは、以下のような場合に失敗する可能性があります。 が予想外のリモートの新規コミットであった場合(厳密には リモート追跡ブランチにまだ取り込んでいない場合)、これは を誤って上書きしたくない場合に便利です。 のコミットについてまだ知らないので、単に を上書きしてください。

git push <remote> <branch> --force-with-lease

の使用方法について、より詳しく知ることができます。 --force-with-lease によって のいずれかをお読みください。