2017-08-15 1 views
0

まず、私はその後、私はバーにFooクラスのインスタンスの名前を変更するファイルを編集し、分岐コミットするために省略した直後にダングリングコミットをリカバリする方法を教えてください。

> git checkout -b renaming-Foo-to-Bar 

をチェックアウト。その後

> git add -u 

は、今私はgit commit -m "renamed Foo to Bar"を実行するために省略します。

私がコミットしたと考えて、ブランチをマスターにマージします。

> git checkout master 
> git merge renaming-Foo-to-Bar 

それは私が私が私がコミットしていなかったことを実現し、マージメッセージ(ソート「マージする何もない」のようなもの) を読ん後にのみです。

IIUCは、私は今、いわゆる「コミットぶら下がり」を持っている、と

> git fsck --lost-found 
Checking object directories: 100% (256/256), done. 
dangling blob 03c044a..cb 
dangling commit ab8076f..47 
dangling commit 128532d..99 
dangling commit 5605e2d..4a 

を実行して、私はそれを回復することができます。しかし、dangling commitdangling blobメッセージにタイムスタンプやその他の識別情報は付いていません。

どのようにこのようなぶら下がりコミットを回復しますか?最初の数と最後の数シャス上

> git fsck --lost-found | wc 
Checking object directories: 100% (256/256), done. 
     52  142 2806 

Runninggit show 03c044a..cb私の歴史の中で深い変化はなく、最近のものを明らかにする:

は、残念ながら私の dangling commits/blobsは多いです。

答えて

0

変更をコミットしてステージングしただけでなく、失われてしまった場合、変更を見つける唯一の解決策は、ぶら下がったブロブを検索することです(変更をステージングするときにコミットオブジェクトは作成されません。オブジェクト:-()

対応するファイルを日付順にソートし、コマンドgit cat-file -p SHA1を使用してコンテンツを表示することもできます。

先週同僚を保存し、すべてのBLOBコンテンツをファイルに入れてフォルダに入れてから、テキストエディタを使って目的のファイルを見つけたのです。

+0

'git cat-file -p SHA1'は便利ですが、セパレータやタイムスタンプではなく、出力するファイルのパス/ファイル名を表示しません。複数の言語が1つの出力で一緒にスローされます。 – Calaf

+0

パスとファイル名は、ステージング時に作成されないツリーオブジェクトに格納されます。それがgitが動作する方法です。だからあなたは良くないでしょう!あなたは 'コミット'オブジェクトから始まり、 'ツリー'から始まり、 'ブロブ'で終わる同じコマンドを使うことができます。 >複数の言語が1つの出力で一緒にスローされます。ありえない。 1つの 'blob' Sha1 = 1ファイルのコンテンツのバージョン。 – Philippe

1

私がコミットしなかったことを私が認識しているマージメッセージ(「何もマージしない」というもの)を読んだ後です。

...この場合、変更を「段階的」にしておく必要があります。つまり、あなたは変更を行ったことになります。 git statusは、すべての準備が整っていることを示す必要があります。

IIUCは、私が今持っている...「コミットぶら下がり」いわゆる

番号:これらの(したがって、いくつかの時点で行われている必要があります)が存在しないコミットがありますが、今持っていますそれらを見つける外部名はありません。あなたがコミットしていないので、このコミットはまだ存在しません。

ブランチの名前をまだコミットしていると仮定して、名前を変更するブランチに戻ってコミットするだけで済みます。これまでに行ったことの詳細については、Git - checkout another branch when there are uncommitted changes on the current branchを参照してください。

関連する問題