Git:「(no branch)」にあるようで、その後、私の変更を失いました


11

GitワークスペースからGithubにプッシュしようとしていましたが、追加およびコミットされた変更がアップロードされなかったようです。

次に、「gitブランチ」を実行すると、次のようなものが得られました:

git branch
* (no branch)
  master

愚かにも、私はマスターに戻ることができると思った

git checkout master

そして今、私の変更はなくなったようです。私のマスターブランチは1日ほど前です。そして、これに戻る方法はないようです(ブランチなし)。

変更は失われますか?またはそれらを回復する方法はありますか?

回答:


13

を行っていない限り、git gc何も失われていません。あなたがする必要があるのは再びそれを見つけることです:)あなたは何を得るのですか:

git reflog show

これにより、何が起こったのか、欠落しているノードのIDが表示されます。


2
マスターを指定せずにgit reflogを実行します。ブランチに結び付けられていないコミットを持つことは可能ですが、この場合、それはおそらく起こったことです。コミットを新しいブランチにチェックアウトして、パスを設定できます。
ジェフファーランド

あなたは正しい、おそらくその方が良いでしょう。質問からの私の仮定は、それがコミットのマスターにあるということでした。回答を更新しました。
CK。

ふう、ありがとう!私は大きなブランチをブランチにコミットしませんでしたが、マスターに切り替えてマージしました...そして私の参照はなくなりました。
パスカル

かなり長い年月が経ちましたが、私もこれに飛び込みました。私はマスターブランチに戻り、突然、失礼しました。2日間の仕事(つまり、1日8時間)がすべてなくなりました。どうもありがとうございます!
ファルガンティル

5

上記の答えは正しいです。これは私がやったことです:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

「オーノー!」瞬間はこれです:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0は(ブランチなし)として表示される匿名ブランチです。それに戻るには、git checkoutを実行するだけで、古い擬似ブランチが復元されます。

念のため、誤ってgcを実行する前にgitリポジトリをバックアップすることをお勧めします。


ブランチをチェックアウトするだけではうまくいきませんでした。機能ブランチで変更が正しく行われました。それでも、ワークスペースでそれらを見ることができませんでした。他の何らかの方法で変更を失ったに違いありません。ただし、を実行して変更を回復できましたgit reset --hard <commit-id>。コミットIDは、の最初の列の英数字コードですgit reflogeffectif.com/git/recovering-lost-git-commitsを参照してください。
トルステン・

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

rev-listを含む多くの方法のうち、fsckのみがブランチレスコミットの検索に役立ちました。どうもありがとうございました。
手本14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.