Git: перемещение изменений между ветвями без изменения рабочего каталога

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

  • [фиксация в рабочей ветке]
  • git checkout branch-to-merge-into
  • git cherry-pick target-commit
  • git push
  • git checkout рабочая ветвь

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

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

  • выполнять "массовые выборки вишни", т.е. выполнять большое количество коммитов; переместите их в другую ветку, скажем, в рабочий день;
  • иметь второй локальный репозиторий git и выполнять на нем вишневый выбор, то есть каждый раз, когда фактическая фиксация и нажатие выполняются в рабочей ветке, перейдите в этот второй репозиторий, потяните за изменения и выполните выбор вишни;

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

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

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

Ответ 1

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

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

Ответ 2

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