質問
、Gitは、私はまったくの枝に関連付けられていないよということを示しています。それは私が変更を行い、しかしそれらをチェックしてみましょうすることが幸せです。どこでこれらの変更は行くのですか?私は、彼らが消える「マスター」に切り替えた場合(マスターにあったもので上書き)と私は再びそれらを見つけるように見えることはできません。何ができますか? Gitは、私は基本的に匿名のブランチ何に対する変更をコミットすることができます場合は、確かに私はそれらを取り戻すことができますか?
解決
あなたのコミットは、任意の枝の上ではありませんので、あなたがチェックアウトしない限り、あなたはそのSHA1を使用して、特定のコミットという作業ディレクトリにそれを見ることができません。あなたはレポからチェックアウトしたものに変更を追跡reflog
を見て、コミット見つけることができます。あなたのタグがXXX
れた場合は、のようなものが表示されます。
$ git reflog
7a30fd7... HEAD@{0}: checkout: moving from master to XXX
ddf751d... HEAD@{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
96c3b03... HEAD@{2}: commit: example commit on tag XXX, not on any branch
7a30fd7... HEAD@{3}: checkout: moving from master to XXX
それはあなたがあなたの作業ディレクトリにコミット見るためにcheckout
しなければならないSHA1を伝えます。
$ git checkout 96c3b03
Note: moving to "96c3b03" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
$ git checkout -b newbranch
$ git branch #lists all branches
feature1
master
* newbranch
私はすべてのプロジェクトファイルは、<全角>のgit checkout
場所と認識されるまで、これは、すべてのの私のファイルシステム(作業ディレクトリ)にコミット特定のように、最初に私には少し奇妙に思えました。実際には、作業ディレクトリは、ローカルのGitリポジトリ上のブラウザとして機能します。だからあなたの変更は、のリポジトリの中に上書きされていないあなたはマスターをチェックアウトしてきたとき、彼らは自分の作業ディレクトリに示されていない。
他のヒント
はい、彼らはreflogsになります。
あなたは、このような任意の時点でのブランチに名前を付けることができます:
git checkout -b my-branch-name
また、あなたがして(上記のようにgit REFLOGを使用して)そのSHA1を見つけることによって、新しいブランチずにバックマスターにコミットマージすることができます:
git checkout master
git merge SHA1
あなたが使用したい2つ目の質問に答えるためにgitのリセット--hard yourtagname
あなたに何が起こるかについては、基本的にタグ名であなたのブランチをフォークと同じ枝にとどまりました。古いフォークであなたのコミットは、彼らが見てちょうど難しいです...まだそこにあります。古いフォークを見つけるためにREFLOGを使用する必要があります。