Как я могу начать чистую ветку без родословной, а затем фиксировать файлы постепенно?
У меня есть фреймворк PHP с версией GIT, и я планирую несколько (радикальных) изменений в своем ядре.
Что я хочу сделать, так это начать работу над новым ядром в новой ветке, но поскольку это изменение может потребовать некоторой реструктуризации в файловой системе, я хотел бы начать эту новую ветвь как можно чище.
Я хочу, чтобы чистая ветка включала только файлы ядра. Когда я заканчиваю свои изменения, я хочу добавить остальные модули из фреймворка в рабочий каталог один за другим, но сохраняю возможность слияния, если я делаю изменения на главном сервере.
Как я могу это сделать?
Ответы
Ответ 1
Ветка без предков
Вам нужен флаг - сирота. Например:
git checkout master
git checkout --orphan foo
# Unstage all the files in your working tree.
git rm --cached $(git ls-files)
создаст новую ветвь с именем foo без предков, но сохранит текущее рабочее дерево из любой ветки, на которой вы были, когда вы вызвали команду (в данном случае - главную ветку). Затем вы можете изменить свое рабочее дерево и выполнить фиксацию, чтобы начать историю ветвей заново.
Инкрементная настройка файлов
Чтобы выполнить инкрементные добавления к вашей истории, используйте git add
для создания только тех файлов, которые вы хотите для каждой фиксации. На странице руководства git -add (1) можно сказать о добавлении файлов выборочно:
Fileglobs (например, *.c) можно указать для добавления всех файлов соответствия. Также может быть предоставлено имя ведущего каталога (например, dir для добавления dir/file1 и dir/file2), чтобы добавить все файлы в каталог, рекурсивно.
Ответ 2
Что вы можете сделать, это просто перейти к новой ветке, git co -b my_new_branch
, очистить свой код и сохранить нужные вам вещи и, наконец, совершить. Это commit, первое из my_new_branch
, будет тогда чистым.
Ответ 3
Если вы должны работать со старой версией git:
mkdir some_dir
cd some_dir
git init
echo a>some_file; git add some_file; git commit -m 'initial commit'
cd ..
git fetch ./some_dir/ master:new_independent_branch
rm -rf some_dir