2

rerere を有効にしてマージを実行し、すべての競合が rerere で解決されると、次のように出力されます。

Resolved 'a.c' using previous resolution.
Resolved 'b.c' using previous resolution.
Resolved 'c.c' using previous resolution.

前の差分 (競合マーカー付き) と解決後の差分を確認したいと思います。私はできることを知っています:

git checkout -m a.c
git diff
git rerere
git diff
git checkout -m b.c
git diff
git rerere
git diff
...

各解像度で使用しているプレ/ポスト画像を確認できます。しかし、各メッセージのgit merge hash出力を手動で解析せずに、その情報または使用された rerere フィンガープリントを取得する方法はありますか?Resolved X using previous resolution.

4

2 に答える 2

1

ポストイメージとプリイメージは に保存され.git/rr-cache/$hexます。自動マージが完了すると、postimage と内容が同じファイルが作成されます。

これは、X のプリイメージ、または HEAD のバージョンとプリイメージの差分を出力する、手早く汚い bash 関数です。副作用として、ダングリング ブロブが作成されます。

# input: file path
# output: the preimage with conflict markers, 
#         or the diff between HEAD's version and the preimage. 
#         If the file path does not exist in rerere cache, return nothing.
function foo(){
    p=$1
    current=`git hash-object $p`
    for hex in `ls .git/rr-cache`;do
        posthash=`git hash-object .git/rr-cache/$hex/postimage`
        if [ "$posthash" = "$current" ];then
            git diff HEAD:$p $(git hash-object -w .git/rr-cache/$hex/preimage)
            # To print the preimage
            #cat .git/rr-cache/$hex/preimage
            return
        fi
    done
}

foo a.c
于 2018-09-27T14:07:48.950 に答える