14

私はローカルブランチでいくつかの変更を行っていましたが、終了したらすべてをリモートブランチにプッシュしました。ブランチを開発にマージする前に、他の人がそこに多くのコードをマージしていたので、リベースを行うべきだと思いました。リベースを行い、いくつかの競合を解決したときに、リモート ブランチにプッシュしました。残念ながら、競合を解決する方法が間違っていたので、リベースが発生する前に戻って、リモート ブランチを新しい状態に更新する必要があります。

私が試したこと

  1. 頭をリセット

    git reset --hard HEAD@{x} //x はリベース直前のヘッド

これは機能し、ローカルブランチの変更を元に戻しますが、リモートにプッシュできる新しいコミットを作成しないため、リモートブランチを更新する方法がわかりません。

4

2 に答える 2

9

リモートリポジトリの履歴を書き換えないでください。

  1. あなたは壊れたものを押します
  2. 誰かが引っ張る
  3. 別の履歴を強制的にプッシュします

混乱を修正しなければならないという問題だけでなく、変更をプルした他のすべての人にも問題があります。したがって、誰も引っ張っていないことが確実でない限り、無理に押し込まないでください。

代わりに、いずれかを使用してコミットを元に戻す必要があります

>> git revert HEAD@{y}   # where HEAD@{y} is the faulty commit

マージの場合、1つのコミットだけが面倒だった場合。

マスターブランチにいくつかのコミットをトランスプラタントするリベースの場合は、実行する必要があります

>> git revert --no-commit HEAD
>> git revert --no-commit HEAD~1
>> git revert --no-commit HEAD~2
   ...
>> git revert --no-commit HEAD@{x}
>> git commit -m "Sorry folks for the big mess I made"

ここで、とHEAD~yの間のコミットはすべてです。HEAD@{x}HEAD

これにより、影響を受けるすべてのコミットが1つの大きなコミットで効果的に取り消されます。

于 2012-11-22T14:23:48.080 に答える