Commit Select Изменения в другую ветку, потом возобновить работу на текущем филиале?

StackOverflow https://stackoverflow.com/questions/3871512

Вопрос

Это часто бывает в моем рабочем потоке: я работаю над функцией в отдельной ветке, и при этом я столкнусь с небольшими вещами, которые нуждаются в фиксации, но из более высоких в рамках или макете сайта, например.

Я хочу вернуться к главному развивать ветвь и фиксируйте изменения из выбора файлов там, затем вернитесь к характерная черта ветвь и ребаза, чтобы я мог продолжить там с несвязанными настройками / исправленными.

я использую git stash а также git stash pop Для этого, но я получаю много конфликтов с кучей файлов, которые я модилирует, но в любом случае, не нужно предано в родительскую ветку.

Есть ли другой способ избежать конфликтов или как-то сохранять текущее состояние, и только выберите «Рабочие изменения дерева» в другую ветку для комбинты? (вроде как Git-Stash-Cherry-pick ;-))

Это было полезно?

Решение

  1. Совершить изменения, которые вы хотите в master на вашей нынешней ветке.
  2. Скрыть свои оставшиеся изменения
  3. Переключиться на master ветвь и использование git cherry-pick Чтобы переместить изменения в master
  4. Вернитесь к вашей ветви перьев и rebase (необязательный)
  5. Раскрыть оригинальные изменения функции

Другие советы

Я обычно делаю это другим путем. Я продолжаю работать в моей особенности ветке, пока не готов сделать там коммит. Как только я буду, я добавляю все изменения, которые принадлежат к новой коммитке для ветви к индексу, но не те, которые относятся к мастеру. 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top