На прошлой неделе я создал репо на Github и забыл выбрать лицензию для репо. Сейчас уже 3 больших коммита.
Я спросил трех участников, все ли в порядке, удаляю ли я репо, а затем создаю его снова с тем же именем и на этот раз выбирая лицензию при создании репо, и они в порядке.
Вопрос
Есть ли способ получить коммиты в новом репо (на этот раз первая фиксация - это файл LICENSE) и при этом сохранить метаинформацию о фиксации?
Ответы:
Да, добавив удаленные коммиты и выбрав их поверх вашего первого коммита.
Остальная часть этого ответа - если вы все еще хотите добавить ЛИЦЕНЗИЮ в свое предыдущее репо.
Да. Вы можете разместить свою ЛИЦЕНЗИОННУЮ фиксацию как первую фиксацию путем перебазирования.
Ребазинг - это gits способ изменить порядок фиксации, сохраняя при этом всех авторов фиксации и даты фиксации.
При работе с общим репозиторием это обычно не рекомендуется, если вся ваша команда не владеет git-fluent. Для тех, кто этого не делает, они могут просто клонировать новую копию репозитория.
Вот как вы получаете свою ЛИЦЕНЗИОННУЮ фиксацию как первую фиксацию.
1. Обновите и переустановите локальную копию
Проверьте свой проект и поместите файл LICENSE в фиксацию НА ВЕРХ вашего текущего стека из трех фиксаций.
Затем выполните интерактивную перебазировку в главной ветке, чтобы ПОВТОРИТЬ коммиты.
Откроется редактор. Переместите нижнюю строку (ваша «Начальная фиксация», самая последняя фиксация) в верхнюю часть файла. Затем сохраните и выйдите из редактора.
Как только вы выйдете из редактора, git напишет коммиты в указанном вами порядке.
Теперь у вас обновлена локальная копия репозитория. делать:
проверять.
2. Принудительно переместите новое состояние репо на github
Теперь, когда ваша копия обновлена, вам нужно принудительно отправить ее на github.
Это скажет github переместить главную ветку в новое место. Вы должны принудительно нажимать только в таких редких случаях, как этот, когда все, кто работает с ним, знают об ожидающих изменениях, иначе это запутает ваших соавторов.
3. Синхронизируйте соавторов с github
Наконец, все соавторы должны будут синхронизироваться с этим репозиторием.
Во-первых, у них должны быть чистые репозитории, так как следующая команда может быть разрушительной, если есть несохраненные изменения.
Вот и все. Теперь все должны быть синхронизированы.
источник
У меня была аналогичная проблема, когда я забыл разветвить репо на свой github и добавил несколько коммитов, прежде чем осознал свою ошибку.
Я нашел довольно простое решение.
Сначала удалите пульт в исходное репо
git remote remove origin
Во-вторых, добавьте пульт в новую вилку на моем github
git remote add origin <my repo URL>
Затем я нажал на origin master, и все мои коммиты появились на моем github.
источник
git push --set-upstream origin master
, но Git дает вам об этом знать.SourceGit = UrlS
Теперь в пункте назначения будут те же данные, что и в источнике (вы также можете использовать origin вместо origin2)
источник
Я использовал следующий подход:
Клонируйте исходное репо в папку типа / c / SrcRepo
Клонируйте целевое репо в папку, например / c / DstRepo, и переключитесь на целевую ветку
В корневой папке целевого репо выполните команду:
git pull / c / SrcRepo srcBranch --allow-несвязанные-истории
Нет необходимости создавать дополнительную удаленную ссылку
источник
На основе ответа @Moocowmoo, но пытается его немного упростить
По-другому это пытается избежать конфликтов, насколько это возможно, просто предполагая, что пульт правильный.
Однако он плохо обрабатывает удаленные файлы, поэтому все еще существует ручной элемент.
# assuming you are already on the branch you want to be git remote add oldrepo https://github.com/path/to/oldrepo git fetch oldrepo # take all or subset of changes from a branch git cherry-pick --strategy recursive --strategy-option theirs oldestCommitHash^..latestCommitHash # or take all changes included in a specific merge commit (easiest) git cherry-pick --strategy recursive --strategy-option theirs mergeCommitHash^..mergeCommitHash # handling deleted files/unhandled conflicts # just keep repeating this section git mergetool # either c/m or d based on if you want to keep or delete the files git cherry-pick --continue
источник