Вы создали коммит, но не обновили ни одного ссылки, чтобы указать на него.Вы все еще проверены на нерожденную ветку master
.(Помните, по умолчанию git log
показывает историю того, что было извлечено; и даже когда вы говорите, что оно показывает «все», оно стремится только к тому, что достижимо из ссылок.)
Вы не показывали это выше,но когда вы выдавали commit-tree
, он должен был напечатать хеш для стандартного вывода (и в моем тесте, следуя вашим шагам, это так).Тогда, ссылаясь на это как <commit-hash>
, вы можете сказать
git merge <commit-hash>
. Изменяющееся имя файла - это в основном красная сельдь.Ни индекс, ни база данных никогда не содержат объект, который знает apple.txt
в этом сценарии, и поэтому apple.txt
- это просто неотслеживаемый файл в рабочем дереве, как вы заметили.
Обновление - в качестве дополнительной заметки вы создаете новый коммит без родителя, что имеет смысл, поскольку в вашем репо еще нет коммитов (если я правильно читаю ваш сценарий).В общем, если вы добавляете новый коммит в существующую (и извлеченную) ветвь, вам нужно будет указать аргумент, такой как -p HEAD
- и даже тогда одна команда commit-tree
не будет обновлять ветку.
Если вы хотите избежать слияния (предпочитая команды более низкого уровня), альтернативой будет git update-ref
, как в
git update-ref refs/heads/master 50b7
(Это немного опаснее, так как с большей вероятностьюнеправильно, если вы знаете, что делаете, даже если допустили ошибку ... Но такова природа сантехнических команд.)