私はいくつかのコミットを で押しつぶしてgit rebase
を実行しましたgit push --force
(これは悪いことだとわかっています)。
現在、他のソフトウェア エンジニアは異なる履歴を持っており、 を実行するとgit pull
、Git はマージします。 を実行する以外に、これを修正する方法はありますか?rm my-repo; git clone [email protected]:my-repo.git
の反対のようなものが必要なのですgit push --force
が、git pull --force
意図した結果が得られませんでした。
ベストアンサー1
新しいコミットを受け取るには
git fetch
リセット
を使用してローカル ブランチのコミットをリセットできますgit reset
。
ローカル ブランチのコミットを変更するには:
git reset origin/main --hard
ただし、ドキュメントには次のように記載されているので注意してください。
インデックスと作業ツリーをリセットします。<commit> 以降に作業ツリー内の追跡されたファイルに加えられた変更はすべて破棄されます。
実際にローカルで行った変更をすべて保持したい場合は、--soft
代わりにリセットを実行します。これにより、ブランチのコミット履歴は更新されますが、作業ディレクトリ内のファイルは変更されません (その後、コミットできます)。
リベース
次のコマンドを使用して、他のコミット/ブランチの上にローカルコミットを再生できますgit rebase
。
git rebase -i origin/main
これにより、対話モードでリベースが呼び出され、リベースする履歴に含まれていない個々のコミットをどのように適用するかを選択できます。
削除したコミット ( を使用git push -f
) がすでにローカル履歴にプルされている場合、それらは再適用されるコミットとしてリストされます。それらはリベースの一部として削除されるか、または単にブランチの履歴に再度含められる必要があり、次のプッシュ時にリモート履歴に再び表示されます。
git command --help
上記のコマンド(またはその他のコマンド)の詳細と例については、ヘルプを使用してください。