671 Stimmen

Das Commit-Protokoll für eine bestimmte Zeile in einer Datei abrufen?

Gibt es eine Möglichkeit, Git dazu zu bringen, Ihnen ein Commit-Protokoll nur für Commits zu geben, die eine bestimmte Zeile in einer Datei?

Wie git blame aber git blame zeigt Ihnen die LETZTE Übergabe an, die eine bestimmte Zeile berührt hat.

Ich würde gerne ein ähnliches Protokoll erhalten, nicht die Liste der Übertragungen an einer beliebigen Stelle der Datei, sondern nur die Übertragungen, die eine bestimmte Zeile berührt haben.

3 Stimmen

Siehe auch Schuld zuweisen

13voto

Cascabel Punkte 449595

Ich glaube nicht, dass

Wenn Sie Luc sind einige identif git blame -L . Zum Beispiel

git blame -L '/variable_name *= */',+1

Diese findet aber nur erste Spiel für diesen Bereich

Sie c git blame -n -L $n,$n $file . Die erste dass verpflichten, git blame -n $n,$n $commit^ $file d.h. die

(Anmerkung

Bearbeiten: Ich habe dieses Mailing l von Mar tig y git gui ha

9voto

Lucas Cimon Punkte 1696

Hier ist

git rblame -M -n -L '/REGEX/,+1' FILE

Ausgabe

00000000 18 (Not Committed Yet 2013-08-19 13:04:52 +0000 728) fooREGEXbar
15227b97 18 (User1 2013-07-11 18:51:26 +0000 728) fooREGEX
1748695d 23 (User2 2013-03-19 21:09:09 +0000 741) REGEXbar

Yo .gitconfig oder einfach

git config alias.rblame !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); echo $line; done' dumb_param

Dies ist

git-rblame () {
    local commit line
    while line=$(git blame "$@" $commit 2>/dev/null); do
        commit="${line:0:8}^"
        if [ "00000000^" == "$commit" ]; then
            commit=$(git rev-parse HEAD)
        fi
        echo $line
    done
}

Der pi git log --pickaxe-rege ) wird

Eine Grenze die Schuld geben nur Retoure

Endlich, Git zeigen an jedem

git config alias.rblameshow !sh -c 'while line=$(git blame "$@" $commit 2>/dev/null); do commit=${line:0:8}^; [ 00000000^ == $commit ] && commit=$(git rev-parse HEAD); git show $commit; done' dumb_param

7voto

krlmlr Punkte 23448

Dies wird git blame für tous mea $LINE der Datei $FILE :

git log --format=format:%H $FILE | xargs -L 1 git blame $FILE -L $LINE,$LINE

Wie üblich, t

| sort | uniq -c

zu ge git blame Ergebnisse für

6voto

Vikas kumar Punkte 81

Simp

L735

git blame -L735,750

4voto

sastorsl Punkte 1831

In meinem Fall

myfile=haproxy.cfg
git rev-list HEAD -- $myfile | while read i
do
    git diff -U0 ${i}^ $i $myfile | sed "s/^/$i /"
done | grep "<sometext>"

Oneliner:

myfile=<myfile> ; git rev-list HEAD -- $myfile | while read i; do     git diff -U0 ${i}^ $i $myfile | sed "s/^/$i /"; done | grep "<sometext>"

Diese c

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X