2016-05-24 5 views
1

Я новичок в git, и я изучал его с прошлого месяца. Я понимаю, что он очень мощный по сравнению с другими системами управления версиями. Вчера я узнал, что ветки git - это просто файлы, которые хранят головку (SHA1) фиксации, как указано в каталоге .git/refs/heads /. мой вопрос: как git отслеживает всю ветвь только одним фиксатором (SHA1)? Когда я это делаю:Как git-треки фиксируются в ветвях?

`git show {SHA1}` 

это показывает мне, что совершить diff только. как фиксация знает, какие фиксации являются/являются родителями? Когда я делаю

`git rev-parse HEAD^1` 

как оно показывает мне совершение, которое было перед ним. Вначале я полагаю, что филиал хранит все коммиты, участвующие в каком-то определенном порядке, но теперь этот факт полностью смутил меня.

ответ

3

Записи хранятся как Directed Acyclic Graph. Если у вас нет коммитов в вашей истории, то возврат из одной ветви ветки эквивалентен связанному списку.

Вы можете увидеть полное содержимое фиксации с помощью:

git cat-file commit HEAD 

tree линия относится к содержанию этой фиксации (например, как видно на git ls-files). Обратите внимание, что это отличается от некоторых других VCS, которые хранят дельта, а не деревья.

Линии (линии) parent, если они есть, являются ссылками на предыдущие коммиты.


Вообще, если вы хотите такого рода информации низкого уровня, вы должны использовать команды, перечисленные в разделе LOW-LEVEL COMMANDS (PLUMBING) в странице человека git «s.