1

ここに私のコミットがあります:

ABC

C が現在のコミットです。原点で次のようにしたい:

ABCA

したがって、A は現在のコミットですが、B と C は保持されます。私は現在、C が現在のコミットであるレポを複製しています。オリジンを希望どおりに取得するには、次に何をする必要がありますか?

4

2 に答える 2

3

git revert B C

(これにより2つのコミットが追加されますが、ツリーの状態はAの場合と同じになります)

于 2012-08-27T18:13:55.663 に答える
3

コミット '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」を再利用したい場合、人間が履歴を解析するのが難しくなります。

于 2012-08-27T18:11:45.453 に答える