У меня есть дублированные коммиты после запроса на включение. Как мне от этого избавиться?

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

Хочу объяснить, как мы это делаем:

  • Клонируйте исходный репозиторий с помощью git clone original-repo.git
  • Создайте новую ветку для функции, обновления, исправления и т. д. Назовем эту ветку навигационной панелью.
  • Зафиксируйте эти изменения и опубликуйте ветку панели навигации.
  • Создайте запрос на включение, администратор объединит этот запрос на включение в основной и удалит ветку панели навигации.

Когда я проверяю историю коммитов, есть дублированные коммиты, и у одного из них есть проверенный тег. Что мы делаем не так? Вот скриншот для него:

У меня есть дублированные коммиты после запроса на включение. Как мне от этого избавиться?

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

Редактировать: вот вывод git log --oneline --graphimg

Почему есть 2 «обновления: обновлена ​​социальная панель навигации и добавлена ​​функциональность href» Я зафиксировал только 1 раз и объединил его. Что я делаю неправильно? Есть ли лучший способ внести свой вклад в проект?


58
1

Ответ:

Решено

Судя по вашему журналу git, более поздний коммит — это коммит слияния, который объединяет ваш запрос на включение в основной.

Вы можете это увидеть, потому что у него есть линии, соединяющие его как с ecec914, так и с 29f6bdf.

Если вы открываете PR только с одной фиксацией, GitHub по умолчанию использует сообщение фиксации в качестве описания PR, а описание PR формирует сообщение фиксации для фиксации слияния при слиянии PR.

Более поздний коммит проверяется, поскольку это коммит, сделанный GitHub, и они подписывают свои коммиты ключом фиксации GitHub.

GitHub будет автоматически использовать GPG для подписи коммитов, которые вы делаете с помощью веб-интерфейса. Коммиты, подписанные GitHub, будут иметь подтвержденный статус.

источник

Если вы проверите содержимое коммитов с помощью git show -v <ref>, вы должны увидеть, что первый коммит содержит изменения, а второй коммит пуст (поскольку его цель — создать коммит слияния, объединяющий две разошедшиеся истории).

Если вы хотите избежать подобных коммитов слияния в будущем, вам необходимо изменить способ слияния запросов на извлечение.

Один из вариантов — объединиться с основной веткой, используя git merge --ff-only <branch name>, а затем нажать кнопку. GitHub автоматически закроет PR, если обнаружит, что вы объединили его таким образом. Это произойдет только в том случае, если вы сможете перемотать вперед, не создавая коммит слияния.

Если вы хотите/нужно сделать это из пользовательского интерфейса GitHub, вы можете использовать раскрывающийся список кнопки запроса на слияние и выбрать «Перебазировать и объединить», что приведет к перебазированию ваших коммитов поверх основных, а затем перемотке вперед.

Обратите внимание: если вы подписываете свои коммиты, Rebase и merge могут удалить вашу подпись и заменить ее подписью GitHub.