質問

私はブランチを作成せずに私のソースコードのタグ付きバージョンをチェックアウトする場合は、

、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を使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top