Вопрос по branch, git, git-branch – Как создать новую пустую ветку для нового проекта

269

Мы используем git-репозиторий для хранения нашего проекта. У нас есть наши филиалы, отходящие от первоначальной ветви. Но теперь мы хотим создать небольшой новый проект для отслеживания некоторой документации. Для этого мы хотели бы создать новую пустую ветку, чтобы начать хранить наши файлы, и я бы хотел, чтобы другие пользователи сети клонировали эту ветку.

Как мы можем сделать это?

Я пробовал некоторые вещи, но они не работали.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

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

для нового проекта " - Как @honk, я бы предложил поместить это в новый репозиторий. Два варианта оттуда, чтобы интегрировать их. Сделай этоsubmodule в первоначальном проекте, напримерdocs/ указывая на этот другой репо. Или, если вы хотите объединить код позже, добавьте его как удаленный. gertvdijk
Еще один недостатоксирота подход заключается в том, что вам нужно сохранить.gitignoreд файлы, а также постоянно переключаться между двумя корнями (ветвями). Так что я'm также для нового подхода к репо, в новой папке, имеющей те же пульты и отправляющей в другую ветку. simo
Ну, мы делали это раньше, IIRC, и я хотел бы сделать это снова, так что ямне любопытно;) fazineroso
Зачем вам хранить это в ветке? Ветви, как правило, имеют некоторые отклонения от одной и той же кодовой базы. Может быть, просто запуск нового репозитория был бы лучшим решением. Benjamin Bannier

Ваш Ответ

5   ответов
4

Позволять'говорят, у вас естьmaster ветка с файлами / каталогами:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n
Шаг за шагом, как сделать пустую ветку:git checkout —orphan new_branch_nameУбедитесь, что вы находитесь в правильном каталоге, прежде чем выполнять следующую команду:

ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_git rm -rf .touch new_filegit add new_filegit commit -m 'added first file in the new branch'git push origin new_branch_name

На шаге 2 мы просто удаляем все файлы локально, чтобы избежать путаницы с файлами в вашей новой ветке и теми, в которых вы хранитеmaster ветка. Затем мы отсоединяем все эти файлы в шаге 3. Наконец, шаг 4 и после работают с нашей новой пустой веткой.

Однажды ты'Готово, вы можете легко переключаться между своими ветками:

git checkout master 
git checkout new_branch
533

Вы можете создать ветку как сирота:

git checkout --orphan 

Это создаст новую ветку без родителей. Затем вы можете очистить рабочий каталог с помощью:

git rm --cached -r .

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

Функция извлечения или извлечения всегда обновляет локальную информацию обо всех удаленных ветвях. Если вы хотите получить / извлечь информацию только для одной удаленной ветви, вам нужно указать ее.

git clean -fd удаляет неотслеживаемые файлы. stefgosselin
Хороший ответ, но этоОтчасти раздражает, что новая ветвь начинается со всех файлов (из предыдущей ветки). Matt Fenwick
Послеgit checkout --orphan можно использоватьgit reset --hard удалить оставшиеся файлы. Ilya Kozhevnikov
просто для справки: после фиксации в ветке нужно подтолкнуть ее к источнику:git push origin Anaderi
5

если версия git не имеет опции --orphan, этот метод следует использовать;

git symbolic-ref HEAD refs/heads/ 
rm .git/index 
git clean -fdx 

После выполнения некоторых работ

git add -A
git commit -m 
git push origin 
Быть осторожен,git clean можете удалить файлы, которые вы не 'не хочу удалять! Бежатьgit clean -ndx сначала посмотреть, какие файлы он будет удалять, прежде чем вы запустите его по-настоящему с-f вариант. Lassi
10

Создайте пустую новую ветку вот так:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

Если ваши файлы proj-doc уже находятся в коммите в одном подкаталоге, вы можете создать новую ветку следующим образом:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

что может быть удобнее, чемgit branch --orphan если бы это оставило вас с большимgit rm а такжеgit mvделать.

Пытаться

git branch --set-upstream proj-doc origin/proj-doc

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

Еще один способ сделать пустую ветку, если вы нене против переключиться на этоgit checkout --orphan new-branch; git reset --hard jthill
Это сработало чудесно для меня, спасибо ~ Parziphal
Этот ответ интересен тем, что позволяет запустить другую ветку / корень с полностью пустым первым коммитом. Stéphane Gourichon
53

Правильный ответ - создать сиротскую ветвь. Я объясняю, как сделать это подробно в моем блоге:http://sidja.in/post/62663941071

...

Перед запуском обновите GIT до последней версии. Чтобы убедиться, что выперезапустите последнюю версию, запустите

which git

Если он выдает старую версию, вам может потребоваться увеличить PATH с помощью папки, содержащей версию, которую вы только что установили.

Хорошо мыготов После того, как вы сделали компакт-диск в папку, содержащую ваш git checkout, создайте потерянную ветку. Для этого примера яназову филиалmybranch».

git checkout --orphan mybranch

Удалить все в сиротской ветке

git rm -rf .

Внести некоторые изменения

vi README.txt

Добавить и зафиксировать изменения

git add README.txt
git commit -m "Adding readme file"

Тот'сидеть. Если вы бежите

git log

вы'Вы заметите, что история коммитов начинается с нуля. Чтобы вернуться к вашей основной ветке, просто запустите

git checkout master

Вы можете вернуться в сиротскую ветку, запустив

git checkout mybranch
Это'ОПАСНО просто удалить все в рабочем каталоге, потому что у любого нетривиального проекта будут неотслеживаемые файлы (конфигурация, окружение, кеш и т. д.). Slava Fomin II
Ссылка больше не действительна, к сожалению. Alexey
Ответы только на ссылки не приветствуются. Если ссылка перемещена или удалена, ваш ответ становится бесполезным. Подумайте о добавлении важных частей прямо в этот ответ. Обратите особое внимание на вопросы, не охваченные предыдущими ответами. bytebuster
архив замечательная вещь. lucid_dreamer

Похожие вопросы