commit
を使用してコミットした後にrevert
を使用して元に戻す変更を考えた場合、その変更を元に戻すための最善の方法は何ですか?
理想的には、これは履歴を書き換えないように新しいコミットで行われるべきです。
まだその変更をプッシュしていないのであれば、git reset --hard HEAD^
そうでなければ、復帰を元に戻すことは完全に問題ありません。
別の方法はgit checkout HEAD^^ -- .
そして次にgit add -A && git commit
です。
git cherry-pick <original commit sha>
元のコミットのコピーを作成し、基本的にコミットを再適用します
元に戻すを元に戻すと、同じことが行われますが、コミットメッセージが煩雑になります。git revert <commit sha of the revert>
どちらの方法でも、履歴を上書きせずにgit Push
を実行できます。これは、復帰後に新しいコミットを作成するためです。
commit shaを入力するとき、通常必要なのは最初の5文字または6文字だけです。git cherry-pick 6bfabc
復帰コミットは、gitの他のコミットとまったく同じです。つまり、次のように元に戻すことができます。
git revert 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746
それは明らかに変更がプッシュされたとき、そして特にあなたが目的のブランチにプッシュを強制することができないときにのみ意味があります(これはあなたのmasterブランチには良い考えです)。変更がプッシュされていない場合は、他の投稿と同様にチェリーピック、元に戻す、または単に元に戻すコミットを削除してください。
私たちのチームでは、メインブランチでコミットされたRevertコメントにrevertを使用して、主に履歴をきれいに保つためのルールを持っています。何:
7963f4b2a9d Revert "Revert "OD-9033 parallel reporting configuration"
"This reverts commit a0e5e86d3b66cf206ae98a9c989f649eeba7965f.
...
a0e5e86d3b6 Revert "OD-9055 paralel reporting configuration"
This reverts commit 648d7d808bc1bca6dbf72d93bf3da7c65a9bd746.
...
Merge pull request parallel_reporting_dbs to master* commit
'648d7d808bc1bca6dbf72d93bf3da7c65a9bd746'
このようにして、あなたは歴史をたどって物語全体を理解することができます、そして、遺産の知識がない人でさえ彼ら自身のためにそれを解決することができました。あなたがチェリーピックまたはものをリベースした場合、この貴重な情報は失われます(コメントに含めない限り)。
明らかに、コミットが一度以上戻ったり戻ったりした場合、それはかなり面倒になります。
あるいはgit checkout -b <new-branch>
とgit cherry-pick <commit>
を前に、そしてgit rebase
をrevert
commitにドロップすることもできます。以前と同様にプルリクエストを送信します。
元に戻すことはトリックをするでしょう
例えば、
If abcdef is your commit and ghijkl is the commit you have when you reverted the commit abcdef,
それから、
git revert ghijkl
これは復帰を元に戻します
これが私のやり方です。
分岐my_branchname
がマージに含まれていて、それが元に戻された場合。そして私はmy_branchname
を元に戻すことを望みました:
私は最初にgit checkout -b my_new_branchname
からmy_branchname
をします。
それから私はgit reset --soft $COMMIT_HASH
を行います。ここで$COMMIT_HASH
はコミットのコミットハッシュです 前 my_branchname
の最初のコミット(git log
を参照)
それから私は新しいコミットをしますgit commit -m "Add back reverted changes"
それから私は新しいブランチを押し上げますgit Push Origin new_branchname
それから私は新しいブランチにpull requestをしました。
「復帰を元に戻す」という考えが気に入らない場合(特にそれが多くのコミットで履歴情報を失うことを意味する場合)、いつでも gitのドキュメントを参照することができます" 。
次のような状況で
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E <-- fixed-up topic branch
(WはマージMの最初の復帰、DとEは最初に壊れた機能ブランチ/コミットの修正です)
AからEへのコミットを単純に再生することができるので、それらのどれも復帰マージに「属する」ことはできません。
$ git checkout E
$ git rebase --no-ff P
あなたのブランチの新しいコピーは再びmaster
にマージすることができます。
A'---B'---C'------------D'---E' <-- recreated topic branch
/
P---o---o---M---x---x---W---x
\ /
A---B---C----------------D---E
コミット後に元に戻された、ステージングされていない段階的な変更を元に戻すには、次のようにします。
git reset HEAD@{1}
ステージングされていないすべての削除を回復するには
git ls-files -d | xargs git checkout --