Почему строка SHA в представлении вины git имеет ведущую каретку (^)?
Я не уверен, что это поведение причудливо, но вот что происходит: кажется, что если я запустил git blame
в файле, любые строки в этом файле, которые являются исходными, имеют SHA с ведущей кареткой (^
), как это
^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!
Шаги по воспроизведению
В командной строке терминала:
mkdir newProject
cd newProject
git init
echo 'hello, world!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt
Затем убедитесь, что ваш результат вины имеет ведущую каретку, как и моя (хотя ваша SHA, вероятно, не будет соответствовать)
^bb65026 (Brian Danielak 2012-10-27 19:11:54 -0700 1) hello, world!
В качестве теста вы можете попробовать добавить вторую строку в файл и переписать, чтобы увидеть, что только хэш первой строки содержит ведущую каретку
echo 'hello again!' >> testFile.txt
git add testFile.txt
git commit -m "Initial Commit"
git blame testFile.txt
Мой вывод вины теперь выглядит следующим образом:
^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!
Может ли кто-нибудь объяснить, почему это происходит, и должен ли я ожидать этого? Это происходит только тогда, когда строка берется из первого фиксации в репо? Если да, то почему?
Ответы
Ответ 1
В документах для git wame фактически упоминается, что каретка используется для "граничной фиксации", которая выглядит так, как будто они 'определяя что-то вроде "самой старой фиксации в этом диапазоне вины" - в вашем случае это первоначальная фиксация проекта, но с некоторыми различными параметрами, которые вы, возможно, только обвинили в совершении с 3 недель назад.
Ответ 2
Я столкнулся с этой проблемой внезапно в очень старом репозитории и был смущен этим.
Проблема закончилась тем, что я каким-то образом получил мелкий клон в какой-то момент. Простой git fetch --unshallow
исправил его.