переключить ветку git без проверки файлов
возможно ли в git переключиться на другую ветку без проверки всех файлов? После переключения ветки мне нужно удалить все файлы, восстановить их, зафиксировать и переключиться обратно. Таким образом, проверка файлов - это просто пустая трата времени (и есть около 14000 файлов-это долгая операция).
чтобы все было понятно:
Мне нужно все это, чтобы загрузить документация в github.
У меня есть РЕПО с веткой gh-pages. Когда я перестраиваю документация локально, я копирую ее в каталог РЕПО, фиксирую и нажимаю на github. Но я не был счастлив, потому что у меня было две копии документации на месте. И я решил создать пустую ветку и после фиксации переключиться на пустые и удалить файлы. Но переключение назад-это долгая операция, поэтому я задал этот вопрос.
Я знаю, что могу просто оставить на ветке gh-pages и удалить файлы, но мне не нравятся грязные рабочие деревья)
9 ответов:
Да, вы можете сделать это.
git symbolic-ref HEAD refs/heads/otherbranchЕсли вам нужно зафиксировать эту ветвь, вы также захотите сбросить индекс, иначе вы в конечном итоге совершите что-то на основе последней извлеченной ветви.
git reset
используя только основные команды git:
этот ответ немного длиннее, чем у Чарльза, но он состоит исключительно из основных команд git, которые я могу понять и, следовательно, запомнить, устраняя необходимость продолжать искать его.
отметьте свое текущее местоположение (при необходимости сначала зафиксируйте):
git checkout -b tempсброс (перемещение) маркера в другую ветвь без изменения рабочего dir:
git reset <branch where you want to go>теперь temp и другая ветвь указывают на то же самое зафиксируйте, и ваш рабочий dir останется нетронутым.
git checkout <branch where you want to go>так как ваша голова уже указывает на ту же фиксацию, рабочий dir не трогается
git branch -d tempобратите внимание, что эти команды также легко доступны из любого графического клиента.
не было бы лучшим решением иметь два рабочих каталога (две рабочие области) с одним репозиторием или даже двумя репозиториями?
в интересах читателя:
пока я так думаю решение Чарльза Бейли является правильным, это решение нуждается в настройке при переключении на что-то, что не является локальной веткой. Также должен быть какой-то способ, как это сделать с регулярными командами, которые легко понять. Вот что я придумал:
git checkout --detach git reset --soft commitish git checkout commitishпояснил:
git checkout --detachэто то же самое, чтоgit checkout HEAD^{}который оставляет текущую ветку позади и переходит в"отстраненное состояние головы". Так что следующая модификацияHEADбольше не влияет ни на одну ветку. ОтсоединениеHEADне влияет ни на рабочее дерево, ни на индекс.- движется
HEADк ша данногоcommitish. Если вы тоже хотите обновить индекс, оставьте--softпрочь, но я не рекомендую этого делать. Это, опять же, не касается рабочего дерева, и (--soft) не показатель.- придает
HEADв даннойcommitish(филиала) снова. (Еслиcommitish- это Ша ничего не происходит.) Это тоже не влияет ни на индекс, ни на рабочее дерево.это решение принимает все, что относится к фиксации, так что это идеально подходит для некоторых
gitпсевдоним. Элементrev-parseниже просто тест, чтобы убедиться, что ничего не ломается в цепочке, так что опечатки случайно не переключаются в состояние отсоединенной головы (восстановление ошибок было бы намного сложнее).это приводит к следующим
git switch treeishпсевдоним:git config --global alias.switch '!f() { git rev-parse --verify "$*" && git checkout "HEAD^{}" && git reset --soft "$*" && git checkout "$*"; }; f'к вашему сведению, вы можете найти его в моем списке!--40-->
gitпсевдонимы.
вы можете перезаписать свой головной файл с другим именем ветви:
echo "ref: refs/heads/MyOtherBranch" > .git / HEAD
Я думаю, что вы ищете команду сантехника
git read-tree. Это приведет к обновлению индекса, но не будет обновлять файлы в вашем рабочем каталоге. Например, еслиbranch- это имя ветви, чтобы читать:git read-tree branchесли вы хотите, чтобы затем совершить в ветке вы только что прочитали, вам также нужно:
git symbolic-ref HEAD refs/heads/branch
с таким количеством файлов, вы можете быть лучше просто держать два репо, по одному для каждой ветви. Вы можете тянуть изменения вперед и назад по мере необходимости. Это будет менее удивительно, чем пытаться играть цинги трюки с ЖКТ.
Если вы просто пытаетесь изменить, где находится удаленная ветвь, вы можете сделать это с помощью "git push", не касаясь локальной копии.
http://kernel.org/pub/software/scm/git/docs/git-push.html
формат параметра
является необязательным плюс +, за которым следует исходный ref , а затем двоеточие :, а затем конечный ref . Он используется, чтобы указать, что в объект Реф в удаленный репозиторий это должно быть обновлено. например, чтобы обновить foo для фиксации c5f7eba выполните следующие действия:
git push origin c5f7eba:fooНе уверен, что это то, что вы были после или нет.
вы можете использовать
1. git checkout -f <new-branch> 2. git cherry-pick -x <previous-branch-commit-id>previous-branch-commit-id-это фиксация, из которой вы хотите скопировать старые данные.
Comments