Warum sollte der SHA einer Zeile in einer Git-Blamage-Ansicht ein vorangestelltes Caretzeichen (^) haben?

Lesezeit: 2 Minuten

Benutzer-Avatar
Briandk

Ich bin mir nicht sicher, ob dieses Verhalten bizarr ist, aber Folgendes passiert: Es scheint, wenn ich renne git blame in einer Datei haben alle Zeilen in dieser Datei, die vom ersten Commit stammen, einen SHA mit einem führenden Caret (^), so was

^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!
bbcd4a96 (Brian Danielak 2012-10-27 19:11:54 -0700 2) hello again!

Schritte zum Reproduzieren

Von einer Terminal-Eingabeaufforderung:

mkdir newProject
cd newProject
git init
echo 'hello, world!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt

Überprüfen Sie dann, ob Ihre Schuldausgabe ein führendes Caret hat, wie es bei mir der Fall war (obwohl Ihr SHA wahrscheinlich nicht übereinstimmt).

^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!

Als Test können Sie versuchen, eine zweite Zeile zu einer Datei hinzuzufügen und erneut zu bestätigen, um zu sehen, dass nur der Hash der ersten Zeile ein führendes Caret enthält

echo 'hello again!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt

Meine Schuldausgabe sieht jetzt so aus:

^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!
bbcd4a96 (Brian Danielak 2012-10-27 19:11:54 -0700 2) hello again!

Kann mir jemand erklären, warum das passiert, und ob ich damit hätte rechnen müssen? Passiert es nur, wenn eine Zeile aus dem ersten Commit in einem Repo stammt? Wenn ja warum?

  • Übrigens – Sie können immer noch Folgendes tun: git log bb65026 -p usw. (ohne das Caretzeichen) und diese Details anzeigen.

    – SaminOz

    1. September 2016 um 20:16 Uhr

Benutzer-Avatar
Mark Ruschakoff

Die Dokumente für gib schuld Erwähnen Sie tatsächlich, dass das Caretzeichen für ein “Grenzcommit” verwendet wird, was so aussieht, als würden sie so etwas wie “das älteste Commit in diesem Schuldbereich” definieren – in Ihrem Fall ist es das anfängliche Commit des Projekts, jedoch mit einigen anderen Optionen Sie haben möglicherweise nur bis zu Commits von vor 3 Wochen die Schuld gegeben.

  • Wow! Vielen Dank. Ich sehe jetzt, wo das in der Dokumentation steht 🙂

    – Briandk

    28. Oktober 2012 um 2:52 Uhr

  • Könnte die Manpage das besser beschreiben? Gibt es einen besseren Ort für die Beschreibung des Präfixes „Caret“?

    – Philipp Oakley

    28. Oktober 2012 um 21:16 Uhr

  • @PhilipOakley Ja, die Manpage könnte definitiv klarer über ein Boundary Commit sein. Eine oberflächliche Suche nach ‘git “boundary commit” bei Google ergibt auf den Git-Manpages nichts Deutlicheres.

    – Mark Rushakoff

    29. Oktober 2012 um 0:40 Uhr

Ich bin plötzlich in einem sehr alten Repository auf dieses Problem gestoßen und war verwirrt.

Das Problem war letztendlich, dass ich irgendwann irgendwie einen flachen Klon bekommen hatte. Eine einfache git fetch --unshallow hat es behoben.

1140830cookie-checkWarum sollte der SHA einer Zeile in einer Git-Blamage-Ansicht ein vorangestelltes Caretzeichen (^) haben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy