21

すでにリモートリポジトリにプッシュされているいくつかの変更を元に戻そうとしていますが、ローカルで元に戻しました。

git reset --hard COMMIT-HASH

しかし、今では最初に引っ張らずに押すことはできません。もちろん、それは目的を打ち負かします。私はもう試した:

git push -f

どのエラーが発生しますか:

Total 0 (delta 0), reused 0 (delta 0)
remote: error: denying non-fast-forward refs/heads/master (you should pull first)
To git@xxx.beanstalkapp.com:/yyy.git
 ! [remote rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@xxx.beanstalkapp.com:/yyy.git'

では、新しい正しいバージョンのブランチをリモートに取得するにはどうすればよいですか?

4

3 に答える 3

26

git configマニュアルページから:

receive.denyNonFastForwards

trueに設定すると、git-receive-packは早送りではないrefの更新を拒否します。これを使用して、プッシュが強制されている場合でも、プッシュによるそのような更新を防ぎます。この構成変数は、共有リポジトリを初期化するときに設定されます。

プッシュしようとしているサーバーで、この設定が有効になっています。したがって、簡単に言えば、この場合はできなくなりますgit push --force


リモートへのブランチの正しいバージョンを取得するには、ブランチの先端に新しいコミットを行って、ブランチを正しい状態にする必要があります。現在、正しい状態のコミットを行っている場合は、次のコマンドを実行できます。

$ git reset --soft <remote>/<branch>    # point the ref back to the remote, but
                                        #   keep the index and working tree

$ git commit                            # make the 'correction' commit
$ git push
于 2012-08-06T14:20:57.640 に答える
3

サーバーは非早送りプッシュを許可していませんか?

git設定ファイル

[receive]
denyNonFastforwards = true
于 2012-08-06T14:17:14.143 に答える
0

gitの変更を元に戻す最良の方法は、git revertコマンドを使用することです。

最後のコミットを元に戻すには: git revert HEAD^

最後のコミットで行われた変更を元に戻し、その上に新しいコミットを作成します。

それが誰かを助けることを願っています。

于 2013-01-09T10:59:35.327 に答える