2015-05-28 3 views
1

У меня есть привычка делать много мелких коммитов. Моя проблема заключается в том, что он создает чатовую историю, и когда я открываю или обновляю запрос на перенос, я хотел бы сначала их сквош. Однако мое (возможно, ошибочное) понимание заключается в том, что после того, как фиксация будет нажата, раздавление ее - через интерактивную перезагрузку - будет более жестким. Есть ли хороший способ сделать это?Возможно, чтобы проглотить эти коммиты, после того, как они были нажаты и открыт запрос на растяжение?

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

ответ

2

Ваше понимание отчасти верно. Вы хотите избежать переустановленных коммитов, которые были опубликованы. Причина этого, однако, не в том, что это сложнее, чем перезагрузка неопубликованных коммитов, а просто потому, что это создает проблемы для других пользователей. Это связано с тем, что перезагрузка приведет к тому, что эти коммиты будут выброшены и заменены новыми коммитами, которые являются разными и несовместимыми объектами. Поэтому каждый, кто уже знает об этих первоначальных коммитах в этот момент, столкнутся с проблемами, когда они вступают в контакт с теми новыми коммитами, которые заменяют старые.

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

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

Так что да, вы можете и, возможно, должны раздавить свои изменения, прежде чем отправлять свои запросы на тяну. Для этого просто интерактивно переустановите их на базовую ветку (например, master с использованием git rebase -i master) и используйте функции переупорядочения и раздавливания, чтобы очистить все. Я лично также хотел бы отбросить все коммиты (я делаю резервную ветвь раньше, конечно), используя git reset --soft master. --soft заставляет все изменения файлов оставаться там, где они есть, но перезагружать историю фиксации там, где она находится на master. Поэтому, если вы должны были сделать один git commit, тогда вы должны создать единую фиксацию, включающую все эти изменения. Конечно, вы также можете сбросить свой индекс с помощью git reset, а затем выборочно добавить изменения для совершения нескольких небольших коммитов, если это кажется более подходящим.

И когда вы закончите, нажимайте их на удаленную ветку, используя git push --force, чтобы перезаписать старую «грязную» историю. Если вы уже открыли запрос на перенос для филиала, GitHub даже распознает, что обновление запроса на перенос автоматически, добавив примечание, которое вы заменили на нем.

+0

Спасибо за подробный ответ ... Я думаю, что проблема, с которой я столкнулась, - это перезагрузка после того, как мои коммиты были нажаты - есть ли уловка? Как я сквош после всех комментариев и изменений в PR, а также мини-коммитов/нажатий? – jkj2000

+0

Вы можете просто переустановить локально, как если бы вы не продвинули изменения; и затем вы можете принудительно нажать на нее, чтобы перезаписать ранее нажатое состояние, то есть «git push origin yourbranch -force». – poke

+0

Вижу, спасибо. Я почему-то подумал, что после того, как была зафиксирована фиксация, вы не можете интерактивно переустанавливать ее или, по крайней мере, это был мой ограниченный опыт.Я дважды проверю свой рабочий процесс, я должен ошибаться. – jkj2000

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