はのは、私が年代順にこれらのコミットをして言ってみましょう:私は持っているように、後でコミットしたままで、悪いコミットを削除するにはどうすればよいですか?
- B
- C
は今、私は、b
を取り除くしたいが、Cを保ちます:
- C
どうすればよいですか?
(b
とc
の間に競合がない)
はのは、私が年代順にこれらのコミットをして言ってみましょう:私は持っているように、後でコミットしたままで、悪いコミットを削除するにはどうすればよいですか?
は今、私は、b
を取り除くしたいが、Cを保ちます:
どうすればよいですか?
(b
とc
の間に競合がない)
あなたはすでにあなたが使用することができ、リモートへの変更をプッシュした場合:
$ git revert <hash of commit b>
のgitのヘルプを約会談をリベースコミットb
クール!それはコミット 'c'を保持していますか? –
はい、それはあります:) – stewe
文字通り、それは何をしているのは、bの*逆*である新しいコミットを作成し、それをcの上にコミットすることです。それは、コミットBに入ったものを公開し、歴史上の間違いやクリーンアップのトレイルを残すべきです。これは、好きではない人もいますが、本当にあります。 –
すでにリモートリポジトリにプッシュしていないと仮定すると、あなたはインタラクティブなリベースを行うことができます。ここを参照してください:あなたは一つだけのHEADからコミットが必要な場合は、あなただけ持って別のブランチにチェリーピックを使用することができます
そのオーバーコミット:
$ git checkout -b working
$ git reset --hard <hash of the commit `a`>
$ git cherry-pick <hash of the commit `c`>
ハードリセットを作業コピーをそのコミット時点の状態に戻し、チェリー・ピックはコミットc
に導入された変更を作業コピーの上に直接適用します。
の変更を削除し、新たなコミットd
を作成し、この正確なケース!それをチェックしてください:
A range of commits could also be removed with rebase. If we have the
following situation:
E---F---G---H---I---J topicA
then the command
git rebase --onto topicA~5 topicA~3 topicA
would result in the removal of commits F and G:
E---H'---I'---J' topicA
This is useful if F and G were flawed in some way, or should not be
part of topicA. Note that the argument to --onto and the <upstream>
parameter can be any valid commit-ish.
'topicA'はブランチ名ですか? –
はい。この例では、topicA〜5は任意のコミットである可能性があります。それはあなたの質問で 'c'になります。トピックA〜3は 'a' – GoZoner
あなたはこれらをリモートにプッシュしましたか? – Nic