裸のリポジトリでは意味をなさないgitコマンドがいくつかあることを考慮して(裸のリポジトリはインデックスを使用せず、作業ディレクトリがないため)、
git reset --hard HEAD^
このようなリポジトリの最後の変更をコミット解除するソリューションではありません。
インターネットで検索すると、トピックに関連して見つけることができるのは this のみで、これを行うための3つの方法が示されています。
1。 「refを手動で更新する(配管を含む)」;
2。 「git Push -f
裸でないリポジトリから ";
3。 「git branch -f this $that
"。
どのソリューションがより適切だと思いますか、またはこれを行う他の方法はありますか?残念ながら、git bareリポジトリについて見つけたドキュメントはかなり貧弱です。
git update-ref
コマンドを使用できます。最後のコミットを削除するには、次を使用します。
$ git update-ref HEAD HEAD^
または、最後のコミットを削除できないブランチにいる場合:
$ git update-ref refs/heads/branch-name branch-name^
必要に応じて、sha1を渡すこともできます。
$ git update-ref refs/heads/branch-name a12d48e2
git-update-ref コマンドのドキュメントを参照してください。
裸のレポで次を使用する場合:
git reset --soft <commit>
裸のリポジトリにないもの(作業ツリーとインデックスなど)を変更しようとしていないので、裸のリポジトリで--hard
および--mixed
オプションを使用している問題に遭遇しません)。あなたの場合、具体的には(裸のリポジトリから)使用したいでしょう:
git reset --soft HEAD^
git symbolic-ref HEAD refs/heads/<branch_name>
git Push -f
は正常に動作するはずです。
ベアリポジトリを複製する場合、最後のコミットを削除します(git reset --hard HEAD^
言及したとおりですが、ローカルの非ベアリポジトリで)およびプッシュバック(-f
):
Git refspec表記を使用して、次のようなこともできます。
git Push -f Origin +<commit you want to revert to>:<destination_head | branch_name>
これにより、+<object ref>
部分で示されるソースコミットへの宛先ブランチ(refで示される)の更新が強制されます。