Мой предпочтительный метод - начать с , фиксируя сейчас , в той ветке, в которой вы находитесь. Иногда это необязательно, в зависимости от оставшихся шагов, поэтому сначала прочитайте их.
Теперь, когда вы все зафиксировали или нет, следующий шаг зависит от того, можно ли с ним связываться текущий индекс и рабочее дерево . Если нет, и у вас есть Git 2.5 или более поздняя версия, предпочтительно 2.15 или более поздняя, из-за довольно неприятной ошибки, впервые исправленной в 2.15, используйте git worktree add
для создания нового рабочего дерева , настроенного на работайте в / в ветке, где вы хотите внести следующие исправления:
# this assumes you're in the top level of your repository
git worktree add ../quick-fix develop
cd ../quick-fix
Здесь ../quick-fix
- это новое рабочее дерево, которое вы создадите, которое находится в ветке develop
. Делая cd ../quick-fix
- или, возможно, открывая новое окно терминала на вашем Ma c и заходя в каталог там - вы теперь работаете в своем основном репозитории, но в ветви develop
, а не в ветви функций .
На данный момент, поскольку вы уже зафиксировали в своей ветке feature
, у вас есть доступ к всем коммитам, которые вы сделали в своей ветви функций и можете использовать git cherry-pick
, или git show | git apply
, или , как вам нравится - любой из инструментов Git или любой из инструментов вашей системы - для работы в ветке develop
. Если вы не сделали коммит, вы, конечно, не можете выбрать этот последний коммит.
Когда вы закончите обновлять ветку develop
, вы можете вернуться к работе feature
на ветке. дерево, запустите rm -rf ../quick-fix
, чтобы удалить другое рабочее дерево, и запустите git worktree prune
, чтобы получить git worktree
, чтобы понять, что другое рабочее дерево теперь пропало. (Можно безопасно удалить, как только вы сделали все коммиты, которые вы намереваетесь сделать, но в какой-то момент вам нужно запустить git worktree prune
, чтобы напомнить Git, что у вас больше нет develop
.)
Если вы не можете или не хотите sh использовать git worktree add
, вам придется работать в своем основном рабочем дереве, поэтому вам определенно нужно это сделать git commit
. Теперь вы можете git checkout develop
здесь, работать как обычно, и фиксировать как обычно Когда вы закончите, git checkout feature
снова, чтобы вернуться к вашей функции.
В любом случае, вы вернулись к одному рабочему дереву, для которого feature
извлечено. Теперь настало время удалить коммит, который вы сделали на feature
, при условии, что вы сделали один на фиче. Чтобы удалить этот один коммит, запустите:
git reset HEAD^
(или используйте HEAD~
вместо HEAD^
, если вам проще набирать текст и / или лучше в вашей оболочке / CLI, например, если ^
имеет особое значение для вашей оболочки). Это удаляет фиксацию и сбрасывает индекс, но сохраняет рабочее дерево от сделанного вами временного коммита.
Ключевые моменты
Мы делаем временный коммит , если необходимо. Это необходимо, если:
- вы хотите выбрать из него вишню или
- вы хотите повторно использовать ваше основное рабочее дерево и соответствующий ему индекс
В противном случае в этом нет необходимости.
Мы используем git worktree add
для создания новой пары дерево-работа / индекс, которая позволяет вам выполнять работу в другой ветке, не мешая основной работе. дерево и главный индекс Git.
Мы используем git reset
в режиме по умолчанию (--mixed
), чтобы стереть временную фиксацию, как только мы закончим с ней. Это также сбрасывает индекс, поэтому, если вы используете индекс для специальных приемов - разреженного извлечения, или git update-index
с --assume-unchanged
или --skip-worktree
- будьте здесь хотя бы немного осторожнее (но git reset
действительно сочетается с этими ).