Вы можете попытаться собрать его вместе с git hash-object
и git mktree
, как описано в главе Raw Git в The Git CommunityКнига , но я предлагаю более простой подход к выполнению всей работы с одноразовым HEAD.
Если вы хотите начать с кончика текущей ветви, перейдите в состояние detached HEAD с
git checkout $(git rev-parse HEAD)
Часть болтливого вывода из git checkout
намекает на преимущество в том, что вы делаете это таким образом.
Вы находитесь в состоянии «отсоединенный ГОЛОВ». Вы можете осмотреться, внести экспериментальные изменения и зафиксировать их, а также отменить любые коммиты, которые вы делаете в этом состоянии, не влияя на какие-либо ветви, выполнив другую проверку.
Здесь я создаю новые файлы, которые дают gitчто-то сделать, и это представляет ваши реальные изменения с помощью
touch new other stuff blah etc
Теперь, вместо того, чтобы переопределять git, позвольте git делать то, что он уже делает
git add -A .
На этом этапе изменения индекса,из которого git write-tree
с радостью создаст новый объект дерева. Вывод на вашем компьютере в вашем хранилище - это хеш, о котором вы спрашивали.
git write-tree
afba5669cbf579a9f27f1fda66cb0958282fae3a
Хеш, записанный в стандартный вывод, - это хеш только что созданного объекта дерева, но в этом нет необходимости. поверьте мне на слово.
$ git commit -m 'Throwaway commit'
[detached HEAD 0ae9d12] Throwaway commit
5 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 blah
create mode 100644 etc
create mode 100644 new
create mode 100644 other
create mode 100644 stuff
Вывод намекает на имя объекта SHA1 нового коммита (0ae9d12), которое мы можем подтвердить с помощью
$ git rev-parse HEAD
0ae9d12408d1ea7eb02821d66f6de8a2f8423e7f
Но вы хотите знатьхэш объекта коммита дерево , адресуемый с помощью
$ git rev-parse HEAD^{tree}
afba5669cbf579a9f27f1fda66cb0958282fae3a
Обратите внимание, что хэш идентичен выводу из git write-tree
.
Теперь, если вы хотите сохранитькоммит, создайте новую ветку здесь с git branch
. В противном случае, если вы проигнорируете это, коммит и неиспользуемые объекты будут в конечном итоге отброшены как часть обычной сборки мусора в git.