2017-12-06 17 views
1

gitリポジトリで "失われた"作業があります。すなわち、私はいくつかのファイルをコミットし、誰かがどこかでマージしたとすると、すべての変更が失われてしまいました。私はどのように/これが起こったかを判断するのに苦労しています。私はこのquestionからこのコマンドを使用して、私のファイルへの変更のログを見てみると: - :ファイルが変更されたgitですべてのマージ/コミットを見つける

enter image description here

gitk --all

version.txtの私は、次のスクリーンショットを取得します

このファイルには、私たちのビルドシステムによって管理され、そしてそれは、文字列が含まれている必要があり、

1 .0.94.0

少なくとも、上記のスクリーンショットに記載されている内容に基づいています。しかし、実際には、それが実際に文字列が含まれています

1.0.92.0

リポジトリを掘りでは、誰かがマージを行い、マージは内容1.0.92.0でversion.txtを上書きしました。しかし、そのマージは私のgitk出力に現れませんでした。 gitk(またはgit)を実行して、私のファイルを変更したすべてのマージとコミットを表示する方法はありますか?

+0

refログ( 'git reflog')を見ましたか? – evolutionxbox

+0

それはあなたが知っているものによって異なります。 [this](https://stackoverflow.com/questions/47307978/difference-between-different-git-search-commands)は役に立ちますか?答えを参照してください... – Christoph

答えて

1

gitkコマンドに--full-historyを追加すると効果的です。これらのgitk制御オプション付きgitk実行git log(そして時にはgit rev-list):デフォルトでは

# Start off a git log process and arrange to read its output 
proc start_rev_list {view} { 
    global startmsecs commitidx viewcomplete curview 

[mass snippage] 

    if {$vcanopt($view)} { 
     set revs [parseviewrevs $view $vrevs($view)] 
     if {$revs eq {}} { 
      return 0 
     } 
     set args [concat $vflags($view) $revs] 
    } else { 
     set args $vorigargs($view) 
    } 

    if {[catch { 
     set fd [open [concat | git log --no-color -z --pretty=raw $show_notes \ 
         --parents --boundary $args "--" $files] r] 
    } err]} { 
     error_popup "[mc "Error executing git log:"] $err" 
     return 0 
    } 

は、特定のファイル、すなわち見て、$filesが空でないとき、git logHistory Simplificationを呼ぶものができます。ここではドキュメントはやや混乱していますが、簡単に言うと、--full-historyがなければ、Gitはその親のファイルが現在の形式で含まれている場合、いくつかのマージ・ペアレントを取り除きます。 --full-historyオプションに含まれていないが、それらの一方が$argsで、少なくとも時々$vflags($view)、及び$vflagsに基づいて設定されていること

--full-historyを含んでもよいです。

git logを直接使用する場合は、--full-history-mの両方を追加することを検討してください。デフォルトでは、git logはマージの差分を見ません。 -mフラグを設定すると、各マージを親(親 - nと子)ごとに1つのコミットペアに分割し、それらの各差分を参照します。これはgit rev-listで余分な作業を行うgitkgitkので、影響を与える場合、またはどのよう

は私はわからないんだけど、それは-mgitkへのオプションを追加することも必要されている可能性があります。

+0

私は完全に純粋なgitのバージョンでクールです。私が 'git -m --full-history versionをするとき。txt 'では、version.txtの内容が変更されなかったマージ(30+)がたくさんあります。私はちょうどversion.txtがマージされたバージョンで両親の一つと異なるマージをしたいです.....これを得る方法はありますか? – John

+1

残念ながら、 'git log'(' -c'または '--cc')の他のオプションは* combined diff *を使用し、子(マージ)が親の* * *にマッチするすべてのマージをスキップします。 '-m'オプションは、' version.txt'が親の* one *とマッチしないところであなたをマージさせます。つまり、あなたが求めているのは、あなたが求めているものです。あなたが求めているものが多くのマージに含まれているだけで、何か違うものを求めなければならないことを示唆しています。 – torek

関連する問題