Как создать фиксацию без родителя в Git?

Возможный дубликат:
В git существует ли простой способ введения в репозиторий несвязанной ветки?

У меня есть небольшой проект, над которым я работал без какого-либо программного обеспечения для управления версиями, и я закончил с тремя разными версиями того же script, где каждый из них делает что-то немного отличное от других. Я инициализировал репозиторий git с одной из версий, и я действительно хотел бы совершить каждый из двух других без родителей. Таким образом, я могу объединить различия, как если бы каждая из трех версий script была кончиками разных ветвей.

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

Ответ 1

Из моего комментария:

Почему бы вам не создать две ветки и добавить к ним две другие версии, а затем работать с ветвями?

Я думаю, что согласен с ответом ctcherry.


Но если вы действительно хотите создать совершенно другую "ветку", не связанную с мастером, вы можете сделать это с помощью git checkout --orphan. Руководство для git checkout описывает работу опции --orphan:

Создайте новую ветку-сироту с именем <new_branch > , начатую с <start_point > и переключитесь на него. Первая фиксация, сделанная в этой новой ветке, не будет иметь родителей, и она станет корнем новой истории, полностью отключенной от всех других ветвей и совершит.

Вы можете использовать его следующим образом:

git checkout --orphan version2
git rm -rf .
<add version2 script>
git add your files
git commit -m 'Initial commit for version 2'

Если ваш Git старше 1.7.2 (когда был введен git checkout --orphan), вы можете использовать чередующуюся последовательность команд из "Создание нового Пустые ветки" в Git Community Book:

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

git symbolic-ref HEAD refs/heads/newbranch 
rm .git/index 
git clean -fdx 
<do work> 
git add your files 
git commit -m 'Initial commit'

Ответ 2

Вы можете создать ветвь для каждой версии script и передать их этим отдельным ветвям. Затем объедините их по одному обратно в мастер. Это должно иметь эффект, который вы ищете.

Ответ 3

Почему бы не начать с "пустого" репо (например, одного чтения вашего заявления о проблемах выше). Затем вы можете разветкить три раза и добавить разные версии script в каждую из ветвей и передать их отдельно.

Затем вы можете разветкить/изменить/зафиксировать/слить и попробовать все варианты в хорошо управляемом режиме.