9

私が使用しているのと同じ git リポジトリから発信された一連のファイルが送信されましたが、それらは古いコミットに対して開発されたものです。彼らが使用したコミットを見つける方法は? 差分の最小行のようなもの。

4

1 に答える 1

5

彼らが使用したコミットを見つける方法は? 差分の最小行のようなもの。

まさにそれを行うことができます: ターゲット ディレクトリに対して最小の差分を持つコミットを見つけます。リポジトリ内のすべてのコミットに対してループを実行し、それぞれについてターゲットディレクトリとの差分を計算し、差分が最小のものを覚えておいてください。

リポジトリが に./repoあり、問題のファイルが にあるとします./target

#!/bin/sh

cd repo
HEAD=$(git rev-parse HEAD)
git log --pretty='%H' | while read rev; do
    git checkout -q $rev
    lines=$(diff -ruN -x .git . ../target | wc -l)

    if ! [[ "$minlines" ]] || [[ $lines -lt $minlines ]]; then
        minlines=$lines
        commit=$rev
        echo "$lines $rev"
    fi

    [[ $lines -eq 0 ]] && break
done | tail -1

git checkout $HEAD

長い歴史を持つリポジトリの場合、これにはしばらく時間がかかりますが、機能します。差分のサイズに続いて、差分が最小のコミットのコミット ID が出力されます。

このスクリプトの実行中に中断した場合は、適切なブランチ ヘッド (例: git checkout master) をチェックアウトする必要があります。

于 2012-12-05T21:50:19.550 に答える