Подтвердить что ты не робот

Git слить уплощение

Если я работаю в нескольких ветвях по одной функции, я использую git pull branch1 branch2 branch3, чтобы вытащить все изменения в мою главную ветку. Тем не менее, все журналы фиксации каждой ветки также копируются. Как сгладить журнал фиксации до одного сообщения?

4b9b3361

Ответ 1

Вы можете использовать интерактивный rebase и "squash" коммиты - см. также Git Готовый учебник по раздаче через rebase. Извините, что просто дамп ссылку на вас, но это довольно тщательный учебник. О, и это также отлично справится с вашими слияниями.

Ответ 2

"git merge --squash" (после "git fetch"; "git pull" - это просто выборка + слияние, pehaps также разрешает параметр -squash) может что вы хотите.

Из git -merge (1):

- кабачки

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

Ответ 3

Как сказал Брайан Уайт, проблема с git merge --squash заключается в том, что она не дает вам никакой видимой ссылки и, следовательно, не отслеживается обратно к ветке (или отдельным изменениям), в которую вы слились.

Видно (если рассматривать его как график git log --graph), важная ветвь, которая была объединена назад, ничем не отличается от экспериментальной ветки, с которой вы столкнулись и с радостью отбросьте ее. Оба просто висят там, не привязанные ни к чему. Я лично хочу знать, что какая-то ветка была объединена, поэтому я знаю, что работа выполнена.

Решением, которое работает для меня, является использование слияния с опцией без быстрого доступа.

git merge --no-ff somebranch -m "my commit message"

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

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

Примечание. Мне пришлось вручную нарисовать один из разъемов, поскольку он был таким синим, что он был едва заметен.

git выход журналa