Git: перемещать изменения между ветками без смены рабочего каталога - PullRequest
14 голосов
/ 07 октября 2010

Вариант использования: каждый раз, когда я хочу переместить коммит из одной ветви git в другую, я выполняю следующую последовательность действий:

  1. [зафиксировать в рабочей ветке]
  2. git checkout ветвление для слияния
  3. git cherry-pick target-commit
  4. git push
  5. git checkout рабочая ветвь

Это прекрасно работает, с единственным исключением - каждый раз, когда я выполняю 'git checkout', содержимое рабочего каталога git изменяется (ожидается), и это приводит к тому, что моя IDE (IntelliJ IDEA) выполняет обновление внутреннего состояния (так как отслеживается поддерево файловой системы) внешне доработано). Это действительно раздражает, особенно в случае большого количества небольших коммитов.

Я вижу два пути:

  1. выполнить «массовый выбор вишни», т. Е. Выполнить большое количество коммитов; переместите их в другую ветку, скажем, в конце рабочего дня;
  2. иметь второй локальный репозиторий git и выполнять выборки вишни на нем, то есть каждый раз, когда выполняется фактическая фиксация и передача в рабочую ветвь, переходить во второй репозиторий, извлекать изменения и выполнять выборку вишни там;

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

По сути, было бы идеально, если бы я мог сказать git 'переместить этот коммит из ветви с именем branchX в ветку branch X + 1' без обновления рабочего каталога.

Вопрос: возможно ли выполнить вышеперечисленное?

Ответы [ 2 ]

8 голосов
/ 08 октября 2010

Нет, невозможно переместить коммит между ветками без изменения рабочего каталога.Это потому, что вы в конечном итоге столкнетесь с конфликтом, после чего git сделает паузу, чтобы вы могли исправить конфликт.Если ваша работа напрямую не представляла это состояние, вы не смогли бы правильно исправить конфликты.

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

1 голос
/ 07 октября 2010

Если вам не нужно часто объединять свои изменения, вместо того, чтобы делать cherry-pick, как насчет того, чтобы время от времени делать git merge <working branch> из вашего <branch to merge into>? Это было бы равносильно черчению всех изменений с момента последнего слияния, если я не ошибаюсь (при таком подходе нет риска забыть коммит). Таким образом, «проблема редактора» случается реже.

...