Есть ли способ получить коммиты в новом репо (на этот раз первая фиксация - это файл LICENSE) и при этом сохранить метаинформацию о фиксации?
Да, добавив удаленные коммиты и выбрав их поверх вашего первого коммита.
# add the old repo as a remote repository
git remote add oldrepo https://github.com/path/to/oldrepo
# get the old repo commits
git remote update
# examine the whole tree
git log --all --oneline --graph --decorate
# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three
# check your local repo is correct
git log
# send your new tree (repo state) to github
git push origin master
# remove the now-unneeded reference to oldrepo
git remote remove oldrepo
Остальная часть этого ответа - если вы все еще хотите добавить ЛИЦЕНЗИЮ в свое предыдущее репо.
Да. Вы можете разместить свою ЛИЦЕНЗИОННУЮ фиксацию как первую фиксацию путем перебазирования.
Ребазинг - это gits способ изменить порядок фиксации, сохраняя при этом всех авторов фиксации и даты фиксации.
При работе с общим репозиторием это обычно не рекомендуется, если вся ваша команда не владеет git-fluent. Для тех, кто этого не делает, они могут просто клонировать новую копию репозитория.
Вот как вы получаете свою ЛИЦЕНЗИОННУЮ фиксацию как первую фиксацию.
1. Обновите и переустановите локальную копию
Проверьте свой проект и поместите файл LICENSE в фиксацию НА ВЕРХ вашего текущего стека из трех фиксаций.
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
Затем выполните интерактивную перебазировку в главной ветке, чтобы ПОВТОРИТЬ коммиты.
git rebase -i --root
Откроется редактор. Переместите нижнюю строку (ваша «Начальная фиксация», самая последняя фиксация) в верхнюю часть файла. Затем сохраните и выйдите из редактора.
Как только вы выйдете из редактора, git напишет коммиты в указанном вами порядке.
Теперь у вас обновлена локальная копия репозитория. делать:
git log
проверять.
2. Принудительно переместите новое состояние репо на github
Теперь, когда ваша копия обновлена, вам нужно принудительно отправить ее на github.
git push -f origin master
Это скажет github переместить главную ветку в новое место. Вы должны принудительно нажимать только в таких редких случаях, как этот, когда все, кто работает с ним, знают об ожидающих изменениях, иначе это запутает ваших соавторов.
3. Синхронизируйте соавторов с github
Наконец, все соавторы должны будут синхронизироваться с этим репозиторием.
Во-первых, у них должны быть чистые репозитории, так как следующая команда может быть разрушительной, если есть несохраненные изменения.
# make sure there are no unsaved changes
git status
# pull the latest version from github
git fetch
# move their master branch pointer to the one you published to github.
git reset --hard origin/master
Вот и все. Теперь все должны быть синхронизированы.