74

私は間違いを犯し、コミットすべきではなかったgitにいくつかの変更をコミットしました。コミットした後、変更をプッシュしました。次に、次のコマンドを使用して、変更をリセットしてみました。

 git reset --hard head

ここで、次のコマンドを使用して、この「リセット」をリモートリポジトリにプッシュします。

git push MyBranch

しかし、私はこのエラーを受け取ります:

remote: error: denying non-fast-forward refs/heads/branch (you should pull first)

このコマンドを使用しようとしましたが、成功しませんでした。

git push -f "origin" 

私に何ができるか考えてみませんか?

4

2 に答える 2

139
git push -f origin myBranch 

動作するはずです(MyBranchが他の人によって自分のレポですでにフェッチされている場合、これは危険になる可能性があることを認識している場合)

注:リモートレポ(「オリジン」)の構成が次のように設定されている場合

receive.denyNonFastForwards true

早送り以外のプッシュは拒否されます(強制された場合でも)。「 'git push --force' を拒否するように git リポジトリを構成する方法はありますか?
」 を参照してください。


OP user654019レポート

今回は、プッシュを強制的に設定denyNonFastForwardsfalseて使用することで、なんとか問題を解決できました-f

OP がレポにアクセスできない場合、OP は次のことを行う必要があります。

  • ローカルの HEAD を元の位置にリセットします (「リカバリgit reset --hard?元」を参照):
    git reset HEAD@{1}
  • ProGit bookで説明されているように、マージをキャンセルする新しいコミットを作成します: (あなたの場合)git revert
    git revert -m 1 HEAD~

例:

$ git revert -m 1 [sha_of_C8]
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
 1 files changed, 0 insertions(+), 2 deletions(-)

マージを元に戻す

マージを元に戻す方法に関する完全な説明は、ここにあります

マージコミットによって導入された変更を元に戻すものを含め、新しいコミットのみを生成するというアイデアが残っています。
次に、早送り変更として、その新しいコミットをプッシュできます。

于 2012-03-21T12:13:39.690 に答える
20

プッシュする参照を指定する必要があります。

git push -f origin MyBranch
于 2012-03-21T12:12:47.957 に答える