2010-07-14 9 views
9

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

* (master) D 
* C 
* B 
* A 
* Base 

Я нахожу ошибку в B, поэтому создаю ветку и исправляю ее.

* (master) D 
* C 
| * (fix) Fix. 
|/ 
* B 
* A 
* Base 

Следующая я бегу git rebase --onto fix B D двигаться C и D на В.

* (master) D' 
* C' 
* (fix) Fix. 
* B 
* A 
* Base 

Наконец я бегу git rebase --i fix^^, чтобы увидеть последние несколько фиксаций и я сквош B и Фикс в одну фиксацию.

* (master) D' 
* C' 
* B' 
* A 
* Base 

Есть ли более быстрый способ выполнить тот же рабочий процесс? Я думаю, что слияние было бы проще, но слияние было для меня, потому что я использую git svn, который требует линейной истории.

+2

Возможно, здесь могут помочь опции 'fixup' и' autosquash'? http://stackoverflow.com/questions/2302736/trimming-git-checkins-squashing-git-history/2302947#2302947 – VonC

+0

@VonC Спасибо, это хотя бы сделает эти шаги немного быстрее. –

+0

хороший (для начала). Вы можете опубликовать ответ, иллюстрирующий, как эти шаги выполняются быстрее с этими параметрами. – VonC

ответ

5

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

+0

Часть ADD - это то, чего мне не хватало. Благодарю. –

3

Вы знаете о --squash опции git merge?

--squash

Производят рабочее дерево и индекс состояния, как если бы произошло реальное слияние (для получения информации о слиянии, за исключением), но на самом деле не сделать коммит или переместить HEAD, ни запись $GIT_DIR/MERGE_HEAD, чтобы вызвать следующую команду git commit, чтобы создать фиксацию слияния. Это позволяет создать единую фиксацию поверх текущей ветви, эффект которой совпадает с объединением другой ветви (или более в случае осьминогов).

+0

+1, потому что я не знал о --squash. Однако для этого требуется такое же количество шагов. После того, как я создал исправление, вместо двух переустановок мне нужно было бы выполнить git merge -squash, затем git commit во главе, а затем git rebase -i, чтобы переупорядочить и вырезать исправление в commit с помощью ошибки. –

Смежные вопросы