Просматривая исходный код для brackets-git (расширение git для Brackets), я вижу, что ^!
(cart bang) добавляется к хэшу фиксации при вызове git diff
. См GitCli.js, line 754:Что делает каретка (^!) После фиксации фиксации при вызове git diff?
function getDiffOfFileFromCommit(hash, file) {
return git(["diff", "--no-ext-diff", "--no-color", hash + "^!", "--", file]);
}
Это приводит к следующим в командной строке, используя файл в вопрос в качестве примера:
$ git diff --no-ext-diff --no-color 1f9ea6e^! -- src/git/GitCli.js
Я знаю, что ^
будет относиться к родителю фиксации. Что делает ^!
?
Существует хорошее руководство ко всем различным способам ссылки на коммиты в документах для [git rev-parse] (http://git-scm.com/docs/git-rev-parse). Интерес к этому делу я считаю: «r1 ^! Включает commit r1, но исключает всех его родителей». – Charlie
Из тестирования результат кажется идентичным вызову diff с фиксацией и всеми его родителями в качестве параметров. Я не знаю, что делает git при различении нескольких деревьев (из комментариев кода, это должна быть ошибка). Может быть, это волшебство с базой слияния родителей? – knittl