Каков наилучший рабочий процесс для рефакторинга, смешанного с новыми функциями в Git?

Я использую Git в качестве инструмента управления исходным кодом. На данный момент мой рабочий процесс прост:

  • думать о минимальной новой функции / рефакторинг
  • закодируй это
  • просмотреть различия с HEAD
  • совершить

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

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

Некоторое время я кодирую, пусть в данный момент состояние рабочего каталога будет A. Здесь важно то, что в состоянии A рабочий каталог не готов к фиксации, поскольку новая функция еще не завершена.

На этом этапе я понимаю, что было бы лучше сначала выполнить рефакторинг. Согласитесь, иногда необходимость рефакторинга становится очевидной в процессе модификации кода.

Теперь мне нужно начать заново с HEAD и сначала выполнить рефакторинг. Но я не хочу терять модификацию кода HEAD -> состояние A. Так что в основном мне нужно:

  • выполнить рефакторинг в копии рабочего каталога, которая еще не была изменена после последнего коммита
  • совершить это
  • объединить работу над новой функцией, которую я начал, и остановил ее, когда рабочий каталог находился в состоянии A
  • завершить работу над новой функцией
  • совершить это

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

Как правильно описать описанный выше рабочий процесс в терминах команд Git?

3 ответа

Вы хотите git тайник. Когда ваш рабочий каталог находится в промежуточном состоянии, которое вы не готовы зафиксировать, запустите 'git stash' или 'git stash save' some text ''. Это вернет ваш рабочий каталог в HEAD. Теперь внесите изменения и зафиксируйте. Затем запустите 'git stash pop', и ваша предыдущая промежуточная работа будет объединена с рабочим каталогом. Вы можете иметь несколько тайников; перечислите их gith 'git stash list'. ("Некоторый текст" идентифицирует их. Если вы не предоставите сообщение, используется журнал последнего коммита.)

Смотрите также 'git add --patch' и git add '--interactive'

Когда вы запустите новую функцию, создайте новую ветку и поработайте там. Когда вы думаете, что вам нужно реорганизовать код, над которым вы не работаете, переключитесь обратно на master (или другую выделенную ветку) и сделайте это. Когда вы закончите, объедините ветвь рефакторинга обратно в master. Затем переместите вашу ветку функций поверх обновленного мастера.

git stash - это то, что вы ищете, я верю.

Другие вопросы по тегам