Gitのプッシュを適切に行うには?

リモートのnon-bare "main"repoをセットアップし、それを自分のコンピュータにクローンしました。ローカルで変更を加え、ローカルのリポジトリを更新し、その変更をリモートレポにプッシュしました。その時点までは問題ありませんでした。

ところが、リモートレポで何かを変更しなければならなくなりました。そして、自分のローカルリポジトリの何かを変更しました。私は、リモートレポへの変更は必要ないことに気づきました。そこで、ローカルのレポからリモートのレポにgit pushしようとしましたが、次のようなエラーが出ました。

To prevent you to lose history, non-fast-forward updates were rejected リモートの変更点をマージしてから再度プッシュしてください。 詳細は '注 詳細は git push --help の 'about fast-forwards' セクションを参照してください。

と思ったのですが、おそらく

git push --force

とすれば、私のローカルコピーが強制的にリモートのものに変更をプッシュして、同じものにすることができると思いました。**しかし、リモートレポに戻ってコミットすると、ファイルに古い変更(メインのリモートレポが以前持っていた変更)が含まれていることに気がつきました。

回答の一つに対するコメント](https://stackoverflow.com/questions/5509543/how-do-i-properly-force-a-git-push#comment6275726_5509588)で述べたとおりです

しかし、マスターサーバーに戻って変更を保存すると、古いステージングが表示されます。そのため、コミットしても、リポジトリが同じになりません。また、git pushを再度使用しようとすると、同じエラーが発生します。

どうすればこの問題を解決できますか?

ソリューション

してください。

git push origin  --force

や、特定のレポがある場合は

git push https://git.... --force

これにより、以前のコミットが削除され、現在のコミットがプッシュされます。

適切ではないかもしれませんが、もし誰かがこのページを偶然見つけて、簡単な解決策が欲しいと思ったら...。

ショートフラグ

また、-f--force の略であることに注意してください。

git push origin  -f

も使えます。

解説 (12)

まず第一に、私は「main」レポに直接変更を加えることはしません。もし本当に「メイン」レポを持ちたいのであれば、そこにプッシュするだけで、決して直接変更してはいけません。

表示されているエラーについては、ローカルレポから git pull した後、git push でメインレポに移動してみましたか?あなたが現在行っていることは(私がよく理解していれば)、強制的にプッシュして、「メイン」レポでの変更を失っています。まず、ローカルで変更をマージするべきです。

解説 (4)

私は本当にお勧めします。

  • メインレポにのみプッシュする

  • メインレポが bare repo であることを確認します。これは、メインレポの作業ツリーがその .git ベースと同期していないという問題を起こさないためです。"How to push a local git repository to another computer?" を参照してください。

  • もしメイン (ベア) レポを修正しなければならない場合は、メインサーバー上のクローンを作成して修正を行い、それをプッシュして戻します。

言い換えれば、メインサーバーとローカルコンピュータの両方からベアレポにアクセスできるようにしておくことで、単一の上流レポから/へプル/プルすることができるようになります。

解説 (1)