Каков наилучший рабочий процесс для рефакторинга, смешанного с новыми функциями в 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. Затем переместите вашу ветку функций поверх обновленного мастера.