ここに私のコミットがあります:
ABC
C が現在のコミットです。原点で次のようにしたい:
ABCA
したがって、A は現在のコミットですが、B と C は保持されます。私は現在、C が現在のコミットであるレポを複製しています。オリジンを希望どおりに取得するには、次に何をする必要がありますか?
git revert B C
(これにより2つのコミットが追加されますが、ツリーの状態はAの場合と同じになります)
コミット 'B' と 'C' は、ブランチの履歴の進行状態です。「B」または「C」をローカルで失わずに「A」にリセットするには、オリジンで新しいブランチを使用します。
git checkout -B new-branch master
git reset --hard <A_commit_hash>
git push origin new-branch
「B」と「C」は「マスター」に保持されるため、問題なく実行できgit cherry-pick <commit_of_B_or_C>
ますgit merge master
。
本当に「B」と「C」が必要で、「マスター」を「A」にリセットしたい場合、およびリモートを強制的に上書きした場合の結果について考えた場合:
git branch archived-master master ;# create 'archived-master' branch
git reset --hard A ;# reset master to 'A' state
git push -f origin master ;# overwrite remote's master
これにより、「B」と「C」がローカルの「archived-master」ブランチに保存されます。
私はこれを避けgit revert
ます。コミットを元に戻すgit bisect
と、コマンドがgit rebase
より難しくなり、「B」と「C」を再利用したい場合、人間が履歴を解析するのが難しくなります。