Commit Select Изменения в другую ветку, потом возобновить работу на текущем филиале?
-
28-09-2019 - |
Вопрос
Это часто бывает в моем рабочем потоке: я работаю над функцией в отдельной ветке, и при этом я столкнусь с небольшими вещами, которые нуждаются в фиксации, но из более высоких в рамках или макете сайта, например.
Я хочу вернуться к главному развивать ветвь и фиксируйте изменения из выбора файлов там, затем вернитесь к характерная черта ветвь и ребаза, чтобы я мог продолжить там с несвязанными настройками / исправленными.
я использую git stash
а также git stash pop
Для этого, но я получаю много конфликтов с кучей файлов, которые я модилирует, но в любом случае, не нужно предано в родительскую ветку.
Есть ли другой способ избежать конфликтов или как-то сохранять текущее состояние, и только выберите «Рабочие изменения дерева» в другую ветку для комбинты? (вроде как Git-Stash-Cherry-pick ;-))
Решение
- Совершить изменения, которые вы хотите в
master
на вашей нынешней ветке. - Скрыть свои оставшиеся изменения
- Переключиться на
master
ветвь и использованиеgit cherry-pick
Чтобы переместить изменения вmaster
- Вернитесь к вашей ветви перьев и
rebase
(необязательный) - Раскрыть оригинальные изменения функции
Другие советы
Я обычно делаю это другим путем. Я продолжаю работать в моей особенности ветке, пока не готов сделать там коммит. Как только я буду, я добавляю все изменения, которые принадлежат к новой коммитке для ветви к индексу, но не те, которые относятся к мастеру. git add -p
ET.AL делает это действительно легко. После всех соответствующих изменений в индексе я обязан филиал. Все оставшиеся оставшиеся грязные изменения принадлежат мастеру и будут проводиться просто прекрасным, как только я переключаюсь на это, чтобы я мог совершить его там.
Попробуйте переключиться обратно в master
ветвь использует --merge
вариант. Он попытается сделать три способа сливаться между двумя ветвями. Документация Git имеет хороший пример:
2. After working in the wrong branch, switching to the correct branch would be done using: $ git checkout mytopic However, your "wrong" branch and correct "mytopic" branch may differ in files that you have modified locally, in which case the above checkout would fail like this: $ git checkout mytopic error: You have local changes to 'frotz'; not switching branches. You can give the -m flag to the command, which would try a three-way merge: $ git checkout -m mytopic Auto-merging frotz After this three-way merge, the local modifications are not registered in your index file, so git diff would show you what changes you made since the tip of the new branch.
На MacOS, Gitx. Очень легко сделать вид селективного совершения RAFL, так что это хороший способ подойти к нему, если это среда, в которой вы находитесь.
Также возможно / практично для совершения изменений в отделении и мастера-y изменений в отдельных коммитах, затем использовать git format-patch
экспортировать коммиты из филиала в качестве файлов и git am
тянуть их к мастеру.
Опасность вот если файлы вокруг изменений слишком отличаются, и в этом случае могут быть конфликты при вытягивании коммитов к мастеру.
Как насчет создания временного ветки?
Что-то типа:
- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater