2017-08-22 10 views
0

ブランチAのいくつかのファイルを変更した後、これらの変更されたファイルを追加するのにgit addを使用します。 しかし、私はgit commitを使って現在のブランチに変更をコミットするのを忘れていました。次に、git checkout Bを使って別のブランチに切り替えました。 私がブランチAに再び切り替わったとき、私は変更されたものはここで見つけることができませんでした。 変更されたファイルを元に戻す方法はありますか?gitを追加してgitをコミットしなくてもgitのチェックアウト後にdiffを返すにはどうすればいいですか?

+0

Bをチェックアウトする前に 'git stash'を使いましたか? – 17slim

+0

変更されていないことは確かですか?修正されたファイルがステージングされていない可能性がありますか? – destoryer

+0

いいえ私はBをチェックアウトする前にgit stashを使っていませんでした。ブランチAにいるときにgit statusを使うと、ステージングされていない変更で何も見ませんでした。 –

答えて

0

コミットされていない変更があっても、ブランチを切り替えることができたら、変更したブランチにその変更が反映されます。だから、あなたがそれらの2つのブランチの間の差分をチェックするなら、それは何の変化も表示しません。他のベースブランチとdiffをとるようにしてください。希望

0

git addは通常オブジェクトをオブジェクトデータベースに書き込みます。索引またはコミットから到達できなくなった場合、それはぶら下がったブロブになります。

$ git fsck --no-reflogs | grep 'dangling blob' 
dangling blob 5cd8df407a53f3cf1a00d7df9b92973fc7124649 
dangling blob a15ac56b6ac98b0b26c4d30bd299cf5cea817b83 
dangling blob a052e2e82624bfa14d7004a30e971cfc543d3759 
dangling blob b3cae5cf028ad4728b344193a7c6fe4e76e36af3 
dangling blob bb428320e3f8496ee844dfe1826e5f705e47b0c8 
dangling blob aa9bc6e7a3078a91a895f9ade9ecb0d3f46783a0 
dangling blob 0094f013e9120ac2168248245ee492f1c551754d 
dangling blob 896c4a4752fab07a7be22cc068c50d4b8021c8a9 
dangling blob f6fc725dc3f01cedee7933651e202fa1e46101a4 
$ git cat-file -p 5cd8df407a53f3cf1a00d7df9b92973fc7124649 
... 

紛失したものを1つ1つ見つけて印刷することができます。 (--lost-foundオプションも参照してください)

+0

私はこれを試しましたが、git commitによってコミットされた変更だけが見つかりました。 –

+0

@张张彪その後、オブジェクトデータベースに何も書き込まない 'git add -N'を使用したか、インデックスにアタッチされるか、どこかでコミットされます。 'git add'で書かれたオブジェクトがコミットの前に失われていることは間違いありません。 – ephemient

0

私はそれらを隠し場所で見つけました。 gitの後に大部分のファイルを追加すると、残りのファイルを隠すことを期待してgit stashを使います。しかし、git addを使って追加したかどうかにかかわらず、変更されたファイルはすべて隠しファイルに置かれているようです。

+0

「git stash」を使っていないとコメントしています。 'git stash'のやり方は、少なくとも2つのコミット、現在のインデックスの内容と現在の作業ツリーのコメントを書くことです。追加のファイルを保持するオプションの第3のコミットがあります。これは、無視されない未追跡のファイル、または無視されたファイルを含む未追跡のファイルのいずれかです。これらの2つまたは3つのコミットは行われますが、現在のコミットにぶら下がっているコミットの一種のバッグとして、* no *ブランチに格納されます。 – torek

関連する問題