4

意図しない一連のコミットを誤ってブランチにコミットしてしまいました。私はそれらを配置するつもりでしたmasterが、共有ブランチに配置することになりましたintegintegこれらのコミットを から削除して配置する方法を見つけたいと思いmasterます。私は彼らが決して存在しないことを望みintegます.

integとの両方masterが github で共有されています。ブランチは、integCI 環境で使用されます。

私はそれgit rebaseがオプションであることを読みましたが、私が読んだことから、integ ブランチは、履歴にリプレイされたコミットがあるため、今後使用できなくなりますmaster。具体的には、次のことを指しています。

http://blog.evan.pro/a-simple-explanation-of-git-rebase

それが言うところ:

この時点で、origin/feature/my-topic からプル、マージ、またはリベースしないでください!!!

なぜだめですか?Git は単純に次のように考えるからです。それらをマージしましょう!」... しかし、それは問題です。なぜなら、これらのコミットはあるのですが、git rebase を実行したときにそれらのハッシュが F と G に書き直されたからです。

私の質問は次のとおりです。

  • これらのブランチの状態を回復して、10 個のコミットがinteg終了し、それらのコミットがないようmasterinteg見えるようにするにはどうすればよいですか?
  • それは可能ですか?
  • そうでない場合、続行できる場所に戻るにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

2

git の履歴から何かを「削除」することはできません。revertを使用してコミットできます

git revert HEAD~n 

また

git revert $SHA1_HASH

これを行った後、コミットからパッチを作成し、それらを master ブランチに手動で適用するかgit cherry-pick、 を使用する必要があります。これは本質的に同じです (言及してくれた sleske に感謝します!)

于 2013-04-15T22:02:34.750 に答える
2

最後の 3 つのコミットを から に移動する方法は次のとおりintegですmaster

git checkout master
git cherry-pick integ^^
git cherry-pick integ^
git cherry-pick integ
git checkout integ
git reset --hard HEAD~3
于 2013-04-16T01:30:13.513 に答える