2017-11-24 9 views
0

私はファイルの古いバージョンを見たいと思っていました。私は悪いことをして、マスターブランチでそれをチェックして、孤立した頭を作り、新しいリビジョンをコミットしました。gitはデタッチヘッドでコミットした後に元のマスターに戻ります

これはわかりません。元のリポジトリに戻る方法を理解できませんでした。あたかもコミットが数多く失われたかのように見えました。いくつかの検索の後、私は "reflog"を使って最近のコミットのSHAを見つけることができたことを知りました。そのSHAを別のブランチにチェックアウトし、状況を理解するまでそこから作業します。

古いリビジョンをチェックアウトするときは、ブランチで実行することをお勧めします。しかし、私はgitの全体的なアイデアを取得し始めていると思うし、何が起こったのかを理解したいと思う。

私の質問:「チェックアウトマスター」や「リセット - ハードディスク」を実行して元の状態に戻れないような理由を説明できる人がいますか?これを行う正しい方法は何ですか?ここで

は謎の状態に至った一連のコマンドです:

git checkout 343294f125 myfile.txt 
git checkout -- myfile.txt 
git checkout master myfile.txt 
git add file2 
git commit 

これらのステップは、これらのコマンドのいずれもが、デタッチヘッド状態につながりません

git reset --hard 
git checkout master 
# git log still shows commits going back from 34329, not recent ones 
+0

あなたが何をしたのかは分かりませんが、 'git checkout master'は' master'ブランチに戻る正しい方法です。あなたが実際に 'master'をチェックアウトして、あなたが期待する履歴が見当たらない場合、' git reset -hard'を実行すると意図しない結果が出るかもしれません(元のブランチに戻るためにハードリセットを使わないでください)。 –

+1

commdnsのシーケンスは、分離されたHEADにつながってはなりません。これらのコマンドの前にあなたは何をしたのですか?'git checkout 'や 'git checkout 'のようなものかもしれません。 – ElpieKay

+0

私は上記の最初のコマンドは、分離ヘッドを引き起こしたと考えています。特定のファイルの古いバージョンをチェックアウトしています: "git checkout 343294f125 myfile.txt" – beginner

答えて

0

元のリポジトリを復元していないようです:

git checkout sha1 myfile.txt 
git checkout -- myfile.txt 
git checkout master myfile.txt 

これらのコマンドはすべての内容を取得します。のようにいくつかの改訂版があり、いずれもヘッド状態の分離につながっていません。

最初のものはsha1の時点でmyfile.txtを取得し、作業ツリーに入れてインデックスに追加します。特定のファイルを以前の状態に復元する場合に便利です。

2番目のコマンドは、ファイルをインデックスから取得します。これは、変更をファイルに加えずにファイルを変更し、そのファイルをインデックス上の状態に復元する場合に便利です。索引は前回のリビジョンと異なる場合があります。

3番目のコマンドは、masterブランチからファイルを受け取ります。

ファイルを指定せずに、sha1またはブランチまたはタグだけでチェックアウトを実行すると、分離ヘッド状態になります。つまり、git checkout sha1(パス引数はありません)です。

このモードでは、Gitは作業ディレクトリを指定されたsha1/branch /タグの状態にします。

頭が孤立している場合は、git checkoutで出ることができます。既存のブランチをチェックアウトするか、切り離されたヘッドから新しいブランチを作成して、効果的にその名前にgit checkout -b somenewbranchという名前を付けることができます。

+0

私はその時の状況を作り出すために何をしたのか分かりません。私はコマンドのシーケンスを "git"の履歴をgrepすることで回復したので、正確でなければなりません。しかし、それは確かに私がやり遂げたものだった。とにかく今私はよく理解しています。 – beginner

+0

@beginnerおそらく 'git checkout 343294f125'でしたか? – janos

関連する問題