web-dev-qa-db-ja.com

git bareリポジトリで最後のコミットをコミット解除するにはどうすればよいですか?

裸のリポジトリでは意味をなさない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 コマンドのドキュメントを参照してください。

126

裸のレポで次を使用する場合:

git reset --soft <commit>

裸のリポジトリにないもの(作業ツリーとインデックスなど)を変更しようとしていないので、裸のリポジトリで--hardおよび--mixedオプションを使用している問題に遭遇しません)。あなたの場合、具体的には(裸のリポジトリから)使用したいでしょう:

git reset --soft HEAD^

リモートリポジトリでブランチを切り替える 実行:

git symbolic-ref HEAD refs/heads/<branch_name>
29
Hazok

git Push -fは正常に動作するはずです。
ベアリポジトリを複製する場合、最後のコミットを削除します(git reset --hard HEAD^言及したとおりですが、ローカルの非ベアリポジトリで)およびプッシュバック(-f):

  • 削除するコミットに先行する他のコミットのSHA1は変更​​しません。
  • ベアリポジトリの正確なコンテンツから余分なコミットを差し引いたものを必ずプッシュバックします(最初にクローンを作成したためです)。
7
VonC

Git refspec表記を使用して、次のようなこともできます。

git Push -f Origin +<commit you want to revert to>:<destination_head | branch_name>

これにより、+<object ref>部分で示されるソースコミットへの宛先ブランチ(refで示される)の更新が強制されます。

2
alup