2016-12-27 3 views
1

ローカルブランチをコミットas288saにリセットしたい。 コミットは、リモートリポジトリとローカルリポジトリに格納されます。 --hardフラグを使用してリセットします。git reset - コミットするのがうまくいかない - ヒントがHEADの後ろにある

git reset --hard as288sa 

Checking out files HEAD is now at as288sa

私は、リモートリポジトリにコミットaddcommitresetpushにしたいです。

git push origin myBranch 

rejected error: failed to push some refs to [email protected] Updates were rejected because the tip of you current branch is behind its counterpart. Integrate the remote changes (e.g. git pull) before pushing changes

On branch myBranch nothing to commit, working tree clean

git add -A 
git commit -m "reseted hard" 
は、だから私は git pull、その後、 git add -Agit commitなど git pushを行なったし、その後、 git reset --hard as288saを試してみました。 同じエラーメッセージが再び表示されます。

何が起こっていますか?

答えて

4

「リセットを追加してコミットしない」。 addとcommitは新しいコミットを作成するために作業ツリーの変更を適用する方法ですが、resetは単に既存のコミットを参照するようにrefを移動します。 addcommitコマンドは、作業ツリーに無関係な変更があった場合を除いて、追加/空のコミットに何も言わないと期待しています。

まあ、とにかくプッシュしようとしますが、gitがそれを気に入らないように見えるのは、あなたが祖先に参照をプッシュしようとしているため、gitはそれが良い考えだとは思わないからです。それはあなたにプルをするように指示しますが、そうするときは、myBranchのローカルリファレンスを元の位置に戻してリセットを元に戻します。

これはどういうことだったのですか?あなたがそれを修正する方法を教える前に、あなたがやっていることは誰かがmyBranchに問題を引き起こす原因になると言及するべきです。おそらくあなたがしたいことではありません。

をリセットした後、プルしないで(追加やコミットを心配しなくても)-fフラグを使用してプッシュすることができます。あなたはこれを行う許可を持っているかもしれないし、そうしていないかもしれないが、あなたがしても真剣に、あなたがしたいことではない可能性が高い。

あなたが本当にすべきだと思うのは、です。コミットを元に戻します。つまり、以前のコミットと同じ状態にツリーを戻す前のコミットからの変更を元に戻す新しいコミットを作成します。出版された歴史。 git revertについて

+0

なぜ '--hard'フラグで' commit'を 'リセット 'したいのですか?私はこれが、私がそれをリセットした 'コミット 'よりも前のすべての'コミット'を免除することを知っています。しかし、もし私がそれらを失う気にしない?それは他の人にとってどのように問題になりますか? – Stophface

+0

いつでも、リモートgitから引き出すと、ブランチのローカル参照が、同じブランチのリモート参照と等しいか、または到達可能である(つまり先祖)ことを仮定したいと考えています。ブランチのリモート参照を後方に移動し、分岐パスに移動し始めると、そのレポの他のすべてのユーザーは、その前提が壊れていることに気付くでしょう。彼らは回復することができますが、支店で他の変更を行った場合、それらの変更をリベースする必要があります。レポが共有されている場合は、一般に公開されたコミットを削除するか、公開されたヘッドを「後方に」移動するのは悪いフォームです –

関連する問題