Подтвердить что ты не робот

Как скопировать фиксацию из одного репозитория Git в другое?

На прошлой неделе я создал репозиторий Github и забыл выбрать лицензию на репо. Теперь уже есть 3 больших фиксации.

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

Вопрос

Есть ли способ получить коммиты в новое репо (на этот раз первая фиксация - файл LICENSE) и по-прежнему сохранять мета-информацию commit?

4b9b3361

Ответ 1

Есть ли способ получить коммиты в новое репо (на этот раз первая фиксация - файл LICENSE) и по-прежнему сохранять мета-информацию commit?

Да, добавив удаленный и вишневый сбор коммитов поверх первой фиксации.

# 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 --abbrev-commit

# 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

Остальная часть этого ответа заключается в том, что вы все еще хотите добавить ЛИЦЕНЗИЮ к вашему предыдущему репо.

Да. Вы можете поместить свой LICENSE в качестве первого фиксации путем перезагрузки.

Rebasing - это способ переупорядочения порядка фиксации, сохраняя при этом все авторы фиксации и даты фиксации.

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

Вот как вы получаете фиксацию LICENSE в качестве первой фиксации.

1. Обновите и обновите локальную копию

Проверьте свой проект и поместите файл LICENSE в фиксацию ON TOP вашего текущего 3 файла фиксации.

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

Затем сделайте интерактивную переадресацию на главной ветке до REARRANGE.

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

Что это. Теперь все должны синхронизироваться.