[解決済み】HEADを以前の場所に戻すにはどうしたらいいですか?(Detached head) & コミットの取り消し
質問
Gitで、私は
squash commit
を別のブランチにマージして、リセットすることで
HEAD
を経由して前の場所に移動します。
git reset origin/master
しかし、ここから一歩踏み出す必要がある。HEADを前の場所に戻すにはどうしたらいいのでしょうか?
私はSHA-1フラグメント(
23b6772
) のコミットに移動する必要があります。どうすればこのコミットに戻れるのでしょうか?
解決方法は?
回答する前に、背景を説明し、この
HEAD
です。
First of all what is HEAD?
HEAD
は、単に現在のブランチの現在のコミット (最新) への参照です。
は1つだけです。
HEAD
を除く)。
git worktree
).
の内容は
HEAD
の中に格納されます。
.git/HEAD
で、現在のコミットの40バイトのSHA-1が含まれています。
detached HEAD
最新のコミットでない場合、つまり
HEAD
は、履歴の中の以前のコミットを指しており、そのコミットは
detached HEAD
.
コマンドライン上では、このようになります。
HEAD
は現在のブランチの先端を指しているわけではありません。
切り離されたHEADから復旧する方法について、いくつかの選択肢を紹介します。
git checkout
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits to go back
これは、目的のコミットを指す新しいブランチをチェックアウトします。
このコマンドは、指定されたコミットまでチェックアウトします。
この時点で、ブランチを作成し、ここから作業を開始することができます。
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# Create a new branch forked to the given commit
git checkout -b <branch name>
git reflog
を常に使用することができます。
reflog
もあります。
git reflog
を更新したすべての変更が表示されます。
HEAD
を設定し、目的の reflog エントリをチェックアウトすると
HEAD
をこのコミットに戻します。
HEAD が変更されるたびに、新しいエントリーが
reflog
git reflog
git checkout HEAD@{...}
これで目的のコミットに戻ることができます
git reset --hard <commit_id>
HEADを目的のコミットに移動します。
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
-
注意:(
Git 2.7 以降
) を使用することもできます。
git rebase --no-autostash
と同様です。
git revert <sha-1>
指定されたコミットまたはコミット範囲を元に戻します。
resetコマンドは、指定されたコミットで行われたすべての変更を取り消します。
元になったコミットは履歴に残りますが、取り消しパッチが適用された新しいコミットがコミットされます。
# Add a new commit with the undo of the original one.
# The <sha-1> can be any commit(s) or commit range
git revert <sha-1>
このスキーマは、どのコマンドが何を行うかを示しています。
そこを見るとわかるように
reset && checkout
を修正します。
HEAD
.
関連
-
gitアップロードの共通エラー処理
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] Git リポジトリを特定のフォルダにクローンする方法は?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] git reset --hard HEAD~1 を元に戻すにはどうしたらいいですか?
-
[解決済み] リモートレポにプッシュされたGitの特定のコミットを元に戻す
-
[解決済み] 公開レポの古いGitコミットへのロールバック
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在のブランチのトラッキング情報がありません。
-
[解決済み] masterブランチと'origin/master'が分岐している、'undiverge'ブランチの方法は?
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push s...
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] 無効なVCSルートマッピング - 私のプロジェクトで3つのエラーが発生しました。
-
[解決済み] GIT_DISCOVERY_ACROSS_FILESYSTEM が設定されていない。
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能