Commit выбрать изменения в другой ветке, а затем возобновить работу над текущей ветвью?
Это часто происходит в моем рабочем потоке: я работаю над функцией в отдельной ветке, и, выполняя это, я сталкиваюсь с небольшими вещами, которые нуждаются в исправлении, но выше, чем в структуре или макете сайта, например.
Я хочу вернуться к основной ветке разработки и зафиксировать изменения в выбранных файлах, а затем вернуться к ветки функции и переустановить, чтобы я мог продолжить работу с несвязанными настройками/исправлениями.
Я использую git stash
и git stash pop
, чтобы сделать это, но у меня много конфликтов из кучи файлов, которые я модифицировал, но в любом случае не нужно привязываться к родительской ветке.
Есть ли другой способ избежать конфликтов или каким-то образом сохранить текущее состояние, и только вытащить выбранные рабочие изменения дерева в другую ветку для совершения? (вроде как git -stash-cherry-pick; -))
Ответы
Ответ 1
- Зафиксируйте изменения, которые вы хотите в
master
в вашей текущей ветке.
- Сохраняйте оставшиеся изменения.
- Перейдите в ветвь
master
и используйте git cherry-pick
, чтобы переместить изменения на master
- Вернитесь к своей ветке пера и
rebase
(необязательно)
- Разблокировать исходные изменения функций
Ответ 2
Обычно я делаю это наоборот. Я продолжаю работать в своей ветке функций, пока не готов совершить сделку. Как только я это сделаю, я добавлю все изменения, которые относятся к новому фиксации для ветки, к индексу, но не к тем, которые принадлежат мастеру. git add -p
et.al сделать это очень просто. После всех соответствующих изменений в индексе я передаю ветку. Все остальные оставшиеся грязные изменения принадлежат мастеру и будут переноситься только отлично, как только я переключусь на это, чтобы я мог зафиксировать его там.
Ответ 3
Попробуйте вернуться к ветки 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.
Ответ 4
В MacOS GitX очень легко сделать вид выборочной фиксации rafl, так что хороший способ приблизиться к ней если это среда, в которой вы находитесь.
Также возможно/практично совершать изменения ветвления-y и изменения master-y в отдельных коммитах, а затем использовать git format-patch
для экспорта фиксирует из ветки как файлы и git am
, чтобы втянуть их в мастер.
Опасность здесь заключается в том, что файлы вокруг изменений слишком разные, и в этом случае могут возникнуть конфликты при потяневании коммитов в мастер.
Ответ 5
Как создать временную ветвь?
Что-то вроде:
- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater