Рабочий процесс о том, как выполнить git commit в новую ветку, основанную на другой ветке

#git

#git

Вопрос:

Мой сценарий:

  • Я работаю над веткой
  • сделайте несколько коммитов в этой локальной ветке
  • есть изменения в моей рабочей папке

Теперь я обнаружил небольшую ошибку или опечатку.

  • Я хочу зафиксировать (новую) ветку
  • эта новая ветка должна основываться не на текущей ветке, а, например, на «главном»
  • эту новую ветку не следует извлекать, я хочу остаться в текущей ветке и продолжить

Мой текущий рабочий процесс использует tortoise git, фиксирует новую ветку, затем перебазирует эту ветку, удалив все коммиты, кроме последнего, а затем снова проверяет мою «текущую» ветку.

Текущий поток

 git branch my-typo-fix master
git checkout my-typo-fox
git add myfile
git commit -m "Typo in my file"
git checkout my-current-branch
 

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

Можно ли улучшить этот рабочий процесс или, может быть, я делаю это совершенно неправильно?

Обновить

Немного улучшен рабочий процесс, основанный на комментарии Михаила

 git checkout -b my-typo-fix master
git add myfile
git commit -m "Typo in my file"
git checkout my-current-branch
 

Ответ №1:

Можно ли улучшить этот рабочий процесс

git stash сделано для этого:

 git stash
git checkout master
git checkout -b my-typo-fix
# make change
git add ...
git commit ...
git checkout my-current-branch
git stash pop
 

эту новую ветку не следует извлекать, я хочу остаться в текущей ветке

Затем вам нужно клонировать репозиторий в другой рабочий каталог и внести туда исправление. git commit по определению всегда работайте с веткой, которая в данный момент извлечена. Но конечный результат данного подхода тот же.

Комментарии:

1. Использование stash приведет к тому, что внесенные мной изменения исчезнут из рабочей папки, правильно?

2. Да, и они вернутся, когда вы откроете.

Ответ №2:

Прежде всего, вы могли бы объединить

 git branch my-typo-fix master
git checkout my-typo-fix
 

с

 git checkout -b my-typo-fix master
 

Согласно документам Git,

Указание -b приводит к созданию новой ветки, как если бы git-branch был вызван, а затем извлечен.

Кроме того, вы можете использовать git stash (Git docs), чтобы временно сохранить ваши изменения из рабочей копии (перед переключением на исправленную ветку) и повторно применить эти изменения git stash pop после переключения ветки обратно. Это поможет избежать конфликтов во время проверки.

Комментарии:

1. Я не знал, что вы можете добавить исходную ветку в git checkout