gitブランチを与えられた古いコミットにリセットし、分離されたHEADを修正する方法は?

gitブランチを与えられた古いコミットにリセットし、分離されたHEADを修正する方法は?

私のブランチを以前の作業状態(コミット)にリセットする必要があるので、私は次のようにしました。

git reset --hard c70e611

今は理解

HEAD detached at c70e611
nothing to commit, working directory clean

分離されたヘッダーメッセージを修正/理解/バイパスし、c70e611が現在作業中の最新のコミットであり、作業中のブランチ(マスターブランチではない)のHEADを表すようにプッシュする方法は?

答え1

HEADコミットツリー内のワークスペースの現在位置は、gitブランチdetachedに対応していないことを意味します。この問題を解決するには、新しいブランチを作成する必要があります(新しいブランチに割り当てる名前とgit checkout -b branch置き換えます)。branch

リセット後にコミットを削除するには、マスターブランチを削除して再作成します。

git branch -D master
git checkout -b master

他の場所にプッシュされたリポジトリを処理する場合は、問題を解決するためにさらに作業を行う必要があり、プッシュを強制する必要があります(他のユーザーにワークスペースの再複製を指示する必要があります)共有状態がある場合は、実際に元に戻すコミットを作成する必要があります。以下のコミットで始まるすべてのコミットgit revertから始めて、元に戻すを参照してください。masterc70e611

答え2

HEAD detached at c70e611

を実行するとき、git reset --hardその時点でどのブランチにもないからです。別々のヘッドがあり、別々HEADのヘッドがコマンドに移動しながら、git reset --hard同時に作業ツリーをその状態に再作成します。

特定のブランチfooに設定するにはc70611

git checkout foo
git reset --hard c70611

これが上流にプッシュするのに良い状態であると見なされればfoo大丈夫ですgit push <remote-name> foo

現在の分岐であることを確認せずに強制的にfoo実行するより直接的な方法があります。c70611つまり、fooこのgit update-refコマンドを使用して指す内容を書き換えることができます。

上記のタスクを実行する前に、私は停止して私が知らないうちにどのようにハリーに陥っているかを確認しようとします。おそらく未完成のリベースかもしれません。最初のステップは、git reflog記憶を復活させるのに役立つ最後のいくつかの項目を確認することです。

関連情報