1. ホーム
  2. git

[解決済み] 修正したコミットをリモートの Git リポジトリにプッシュするにはどうしたらいいですか?

2022-03-19 20:53:05

質問

ソースコードで少し作業したとき、いつものようにコミットして、リモートリポジトリにプッシュしました。しかし、私はソースコードの中で私のインポートを整理するのを忘れていたことに気づきました。そこで、前回のコミットを置き換えるために、amendコマンドを実行しました。

> git commit --amend

残念ながら、このコミットはリポジトリにプッシュバックすることができません。このように拒否されます。

> git push origin
To //my.remote.repo.com/stuff.git/
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '//my.remote.repo.com/stuff.git/'

どうすればいいのでしょうか?(リモートリポジトリにアクセスできます)

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

を押したことがあります。 --force.git レポジトリを作成し、Linusに叱られました。 ビッグタイム . 一般的に、これは他の人々に多くの問題を引き起こすでしょう。シンプルな答えは、"Don't do it"です。

とにかくそうするためのレシピは他の人が教えてくれているようなので、ここでは繰り返さないことにします。しかし、その状況から回復するためのヒントがここにあります。 で修正したコミットを --force (または +master) でプッシュアウトした場合。

  1. 使用方法 git reflog を使えば、修正した古いコミットを見つけることができます(これを old を修正したものを新しいコミットと呼ぶことにします。 new ).
  2. との間のマージを作成します。 oldnew のツリーを記録します。 new のように git checkout new && git merge -s ours old .
  3. でマスターにマージします。 git merge master
  4. その結果をマスターに反映させるには git push . HEAD:master
  5. 結果をプッシュする。

そうすると、あなたが修正とプッシュを強制することで抹消したコミットに基づいて作業していた不運な人たちが、その結果のマージを見ることになり、あなたが支持していることがわかるでしょう。 new オーバー old . の間のコンフリクトは、後でマージされたときに表示されません。 oldnew を修正したのですから、彼らが苦しむ必要はありません。