переключить ветку git без проверки файлов



возможно ли в git переключиться на другую ветку без проверки всех файлов? После переключения ветки мне нужно удалить все файлы, восстановить их, зафиксировать и переключиться обратно. Таким образом, проверка файлов - это просто пустая трата времени (и есть около 14000 файлов-это долгая операция).



чтобы все было понятно:



Мне нужно все это, чтобы загрузить документация в github.



У меня есть РЕПО с веткой gh-pages. Когда я перестраиваю документация локально, я копирую ее в каталог РЕПО, фиксирую и нажимаю на github. Но я не был счастлив, потому что у меня было две копии документации на месте. И я решил создать пустую ветку и после фиксации переключиться на пустые и удалить файлы. Но переключение назад-это долгая операция, поэтому я задал этот вопрос.



Я знаю, что могу просто оставить на ветке gh-pages и удалить файлы, но мне не нравятся грязные рабочие деревья)

591   9  

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-new-workdir на чтобы помочь вам в этом.

в интересах читателя:

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

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

    Ничего не найдено.