Объединить ветку GIT без журнала коммитов - PullRequest
41 голосов
/ 08 ноября 2010

В настоящее время, когда я использую GIT, я создаю ветку для каждой работы и делаю различные коммиты до того, как я закончу.Затем я возвращаюсь к своей основной ветке и подталкиваю вверх по течению.Я, скорее всего, буду иметь несколько веток одновременно, а также буду переключаться между ними в процессе работы.

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

Есть ли способ просто объединить сообщение журнала для коммита g ниже (а не коммитов c или e)?

a [master] 
|
b (create branch 'job')
|\
| \
|  c 
|  |
d  e
|  |
f  g (next step is to merge 'job' branch with 'master')

Ответы [ 3 ]

57 голосов
/ 12 ноября 2012

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

Когда коммиты переходят к проверке кода, важно не создавать дополнительных коммитов.

12 голосов
/ 08 ноября 2010

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

вы можете использовать сообщение коммита g для фиксации слияния, а затем просматривать историю с опцией --first-parent.

, если вы действительно хотите потерять историюиз вашей ветки используйте git merge --squash, хотя я не рекомендую это

edit

на случай, если вы недовольны тем, что не считаете свою историю очень чистой, выВы можете использовать git rebase :

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

1 голос
/ 22 октября 2012

Как упомянуто в " Обрезка GIT Checkins / Squashing GIT History ", если ваши коммиты c и e были сделаны с комментарием с префиксом fixup!, тогда rebase --interactive --autosquash (git1 .7+, февраль 2010) может сделать точно того, что вы хотите.

с помощью директивы fixup! вы можете сохранить это сжатие "невидимым" в сообщении фиксации, но при этом воспользоваться автоматическим переупорядочением фиксации с опцией --autosquash.

Для фиксации с префиксом fixup! вы можете определить псевдоним

[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -

Затем псевдоним fixup будет применяться для тех «коммитов (которые) являются просто точками сохранения, т. Е. Не так важны в общей схеме вещей».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...