git fast-import не работает

Я просто пытаюсь удалить историю за конкретным коммитом. Я нашел в Git: как удалить историю перед конкретной фиксацией следующей командой:

git fast-export master~5..master | (cd ../newrepo.git && git init . && git fast-import && git checkout)

Я только что изменил команду для своего случая (мне нужны последние 65 коммитов ветки ip6_dev):

git fast-export ip6_dev~65..ip6_dev | (cd ../puppet/ && git init . && git fast-import && git checkout)

Когда я запускаю команду, я получаю следующий вывод:

---------------------------------------------------------------------
Alloc'd objects:      10000
Total objects:         7985 (       782 duplicates                  )
      blobs  :         4978 (         0 duplicates       2304 deltas of       49
25 attempts)
      trees  :         2942 (       782 duplicates        263 deltas of       29
28 attempts)
      commits:           65 (         0 duplicates          0 deltas of
 0 attempts)
      tags   :            0 (         0 duplicates          0 deltas of
 0 attempts)
Total branches:           1 (         1 loads     )
      marks:        1048576 (      5043 unique    )
      atoms:           2438
Memory total:          2997 KiB
       pools:          2606 KiB
     objects:           390 KiB
---------------------------------------------------------------------
pack_report: getpagesize()            =      65536
pack_report: core.packedGitWindowSize =   33554432
pack_report: core.packedGitLimit      =  268435456
pack_report: pack_used_ctr            =        358
pack_report: pack_mmap_calls          =         65
pack_report: pack_open_windows        =          1 /          1
pack_report: pack_mapped              =   14669749 /   14669749
---------------------------------------------------------------------

fatal: You are on a branch yet to be born

Что мне не хватает?

1 ответ

Решение

Самый последний шаг вашего && ... последовательность:

git checkout

Обратите внимание на отсутствие имени ветви (или определенного идентификатора или пути фиксации). Тогда взгляните на git checkout документация (которая, я признаю, делает это немного неясным):

Обновляет файлы в рабочем дереве в соответствии с версией в индексе или указанным деревом. Если пути не указаны, git checkout также обновится HEAD установить указанную ветку как текущую ветку. [...] Вы можете опустить , в этом случае команда вырождается, чтобы "проверить текущую ветку" ...

Следовательно, следующий вопрос, который нужно задать: "как называется текущая ветка?" Обычно можно бежать git branch чтобы выяснить это, но если мы сделаем это, мы можем вообще ничего не получить (вы вообще ничего не получите, но вы также не получите ветку, отмеченную звездочкой; см. ниже):

$ mkdir example.git
$ cd example.git
$ git init
Initialized empty Git repository in ...
$ git branch
$ 

Есть альтернативная команда git более низкого уровня, которая дает нам правильный ответ:

$ git symbolic-ref --short HEAD
master
$ 

(или мы можем обмануть и посмотреть файл .git/HEAD).

Обратите внимание, что я на самом деле не бегал git fast-import на данный момент, но если я бегу git checkout без аргументов я получаю ту же ошибку:

$ git checkout
fatal: You are on a branch yet to be born

Остается лишь указать на то, что git fast-import импортирует коммиты (и ветки) в соответствии с указаниями, полученными из git fast-export, который вы указали - по имени - экспортировать только определенные коммиты из ветки ip6_dev, Следовательно, я могу предсказать, что если вы запустите git branch вот увидишь:

$ git branch
  ip_dev
$ 

Это означает, что ваш новый репо имеет только одну ветку, ip_dev, который не является ветвью, на которой вы находитесь: вы находитесь на master, которого еще не существует. Если бы ты fast-exportнекоторые коммиты на ветке master, master будет существовать, и вы сможете сделать git checkout,

Если вы хотите иметь только один ip_dev ветвь, просто проверьте это явно, чтобы вы переключили текущую ветвь. У тебя еще не будет master, но теперь git не будет жаловаться на то, что не может проверить это.

Другие вопросы по тегам