2012-04-17 3 views
1

このファイルがブランチの後に作成された場合、プロジェクトからファイルを削除したマージを見つける方法はありますか?私の問題を再現するには、次の手順を明確にすべき:GitはFILE1 "git merge master -s ours"のために失われたファイルを見つける方法

  • のgitを追加

    • のgit initを
    • タッチ
    • FILE1 FILE1 -mコミット
    • gitのブランチnewbranch "マスターでFILE1を追加しました"
    • touchファイル2
    • git add file2
    • git commit FILE2 -m GitはFILE1 -mをコミット
    • FILE1 >>
    • は "file1だけにするマスターの変更を" エコー "分岐の後にマスターにFILE2を追加" gitのチェックアウトnewbranchが
    • "マスターにFILE1を変更し、" エコー「newbranch変更はFILE3が
    • gitの追加我々
    • タッチ-s
    • gitのマージマスター "newbranchにFILE1を変更し、FILE1
    • のgit FILE1 -mをコミット>>" をfile1" するファイル3
    • GitはコミットFILE3 -m "マスターでFILE4を追加した"
    • Gitチェックアウトマスターが
    • タッチFILE4
    • gitのFILE4
    • GitがFILE4 -mをコミット
    • Gitのマージnewbranchを追加 "newbranchでFILE3を追加しました"

    ここで、file2を削除したコミット(マージ)を見つけることができます(この行で起こるマージ/コマンド: "git merge master -s ours")。

    編集:私は探していますコミット--graph --format =としてoneline

  •  
    * 010a604feef300244386490f9c7c777dc9af6b16 Merge branch 'newbranch' 
    |\ 
    | * 3e7f3f6b53c2c92d137fa5a3bac190aa4c3e641f added file3 in newbranch 
    | * b07090c2c6dd5cd2783f3db160f5b6f433beb544 Merge branch 'master' into newbranch 
    | |\ 
    | * | a0053413ab81869574475c0ce889ee721f5ed254 changed file1 in newbranch4 
    * | | 859e813acd24c2090287ef9d83da339c06f1c754 added file4 in master 
    | |/ 
    |/| 
    * | 0004dc5cfe23874208c6a921f9c7434fcffba8f4 changed file1 in master 
    * | 172d20a93ba40fb040348acc5ffe2ad45803ec22 added file2 in master after branching 
    |/ 
    * 6a59be0a3d4203db84b67c02231c420b518fc349 added file1 in master 
    

    • gitのログは次のとおりです。b07090c2c6dd5cd2783f3db160f5b6f433beb544

      • gitのログ-g --diff-filter = D - file2

      リターン:-g --diff-フィルタ= D --followログイン6a59be0a3d4203db84b67c02231c420b518fc349

      • gitのコミット - FILE2

      リターンを:私の中の不思議な010a604feef300244386490f9c7c777dc9af6b16

      をコミット私が問題を発見したリポジトリgit log -g --diff-filter = D - filename私には正しいコミットがありました。

    +1

    reflogはあなたを助けますか? http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html – Sgoettschkes

    +0

    * git log -g --diff-filter = D - これは例私は私の質問に書いた。しかし、問題が発生した私のgitリポジトリではうまくいきました。 –

    答えて

    0

    これを行う方法の1つはgit log --all --raw --diff-filter=D -mです。 --allは、あなたが現在いるブランチではなく、すべてのブランチを見ることです。私は-gを中止しました。これは、reflogsのみを検索し、1つ以上のマージが別のリポジトリで行われた場合、あなたのreflogがあなたが探しているコミットを訪れたことがない可能性があります。 -m--rawは、マージを含む各コミットで何が起きたかを示します(通常は競合を除いて隠されています)。このコマンドは、両方のマージに、file2が削除されたポイントを少なくとも投稿したシナリオでフラグを立てます。

    +0

    私はちょうど私たちの問題でそれをテストして、それは私に正しいコミットを表示します。どうもありがとう。 –

    関連する問題