Помогая другу с проблемой git сегодня, я должен был представить ветку, которая должна быть полностью отделена от master
ветви. Содержимое этой ветки действительно имеет происхождение, отличное от того, что было разработано в master
ветке, но они будут объединены в master
ветку позже.
Я вспомнил, читая Git Джона Уигли снизу вверх, как ветви по сути являются меткой для коммита, который следует определенному соглашению, и как коммит привязан к дереву файлов и, необязательно, к родительским коммитам. Мы пошли, чтобы создать коммит без родительского контроля в существующем репозитории с использованием git-системы:
Таким образом, мы избавились от всех файлов в индексе ...
$ git rm -rf .
... извлек каталоги и файлы из архива, добавил их в индекс ...
$ git add .
... и создал объект дерева ...
$ git write-tree
( git-write-tree
рассказал нам sha1sum созданного объекта дерева.)
Затем мы зафиксировали дерево, не указывая родительские коммиты ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
рассказал нам sha1sum созданного объекта коммита.)
... и создал новую ветку, которая указывает на наш недавно созданный коммит.
$ git update-ref refs/heads/other-branch $COMMIT
Наконец, мы вернулись в master
филиал, чтобы продолжить там работу.
$ git checkout -f master
Кажется, это сработало, как и планировалось. Но это явно не та процедура, которую я бы порекомендовал кому-то, кто только начинает пользоваться git, мягко говоря. Есть ли более простой способ создания новой ветки, которая совершенно не связана со всем, что происходило в хранилище до сих пор?
( git checkout master && git merge --no-commit "orphan-branch" )
Некоторые похожие трюки будут работать с использованием git-reset или игры с индексом. Но это зависит от вашего желаемого рабочего процесса.--no-commit
ongit merge
позволит достичь этого. Возможно, вам понадобится выполнитьgit reset origin/master
следующий ваш коммит, куда вы хотите, но тогда файлы из вашей сиротской ветви будут отображаться как «неотслеживаемые файлы», если вы не включите их в свой файл .gitignore.Из Git Community Book :
источник
rm .git/index
уродлив :-)Хотя решение с
git symbolic-ref
индексом и без него работает, концептуально может быть проще создать новый репозиторий.тогда извлекай из него
Теперь вы можете удалить / путь / к / не связан
источник
git branch
илиgit checkout
. Я рад, что git делает подобные вещи возможными, но почему бы не быть проще?git branch
и переключаться между ними черезgit checkout BRANCH_NAME
.Github имеет функцию под названием Project Pages, где вы можете создать определенную именованную ветку в вашем проекте, чтобы предоставить файлы, которые будут обслуживаться Github. Их инструкции следующие:
Оттуда у вас есть пустой репозиторий, в который вы можете добавить свой новый контент.
источник
Текущий выбранный ответ правильный, я бы просто добавил это по совпадению ...
Это именно то, как github.com позволяет пользователям создавать страницы Github для своих репозиториев через осиротевшую ветвь
gh-pages
. Красивые шаги даны и объяснены здесь:https://help.github.com/articles/creating-project-pages-manually
В основном команды git для настройки этого следующие:
git checkout --orphan gh-pages
(создайте ветку без родителей в репозитории gh-pages)git rm -rf .
(удаляет все файлы из рабочего дерева ветки)rm '.gitignore'
(даже Гитиньор)Обратите внимание, что вы также можете указать папку / docs в вашем репо как источник «сайта проекта», который Github использует для создания сайта.
Надеюсь это поможет!
источник
Иногда я просто хочу мгновенно создать пустую ветку в проекте, а затем начать делать работу, просто извиняюсь за следующую команду:
источник
Если ваш существующий контент уже был зафиксирован, вы теперь (Git 2.18 Q2 2018) можете извлечь его в свою собственную новую сиротскую ветвь, так как реализация "
git rebase -i --root
" была обновлена, чтобы больше использовать механизм секвенсора.Этот секвенсор теперь позволяет перенести всю топологию графа коммитов в другое место .
См. Коммит 8fa6eea , коммит 9c85a1c , коммит ebddf39 , коммит 21d0764 , коммит d87d48b , коммит ba97aea (03 мая 2018 г.) от Johannes Schindelin (
dscho
) .(Слиты Junio C Hamano -
gitster
- в фиксации c5aa4bc , 30 мая 2018)источник
Нашел этот скрипт по адресу http://wingolog.org/archives/2008/10/14/merging-in-unrelated-git-branches и он работает очень хорошо!
источник
git fetch $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH
. Я что-то упускаю?В последних версиях Git, по крайней мере 2.27, это может быть достигнуто с помощью
switch
команды:Официальная документация: https://www.git-scm.com/docs/git-switch
источник