Мы разрабатываем веб-приложение с моими друзьями. Всякий раз, когда мы фиксируемся в этом репозитории, GitHub всегда дублирует коммиты. Я не хочу, чтобы это произошло, и я даже не знаю, что это правда.
Хочу объяснить, как мы это делаем:
git clone original-repo.git
Когда я проверяю историю коммитов, есть дублированные коммиты, и у одного из них есть проверенный тег. Что мы делаем не так? Вот скриншот для него:
Для информации: раньше мы делали форк исходного репозитория и фиксировали его, но таким образом нам приходится обновлять исходное репо, и я вижу много сообщений об обновлении. Вот почему мы больше так не поступаем.
Редактировать: вот вывод git log --oneline --graph
img
Почему есть 2 «обновления: обновлена социальная панель навигации и добавлена функциональность href» Я зафиксировал только 1 раз и объединил его. Что я делаю неправильно? Есть ли лучший способ внести свой вклад в проект?
Я думаю, что также возможно выполнить «слияние» с перебазированием поставщиков… это также может это объяснить.
Вы не сделали ничего «неправильного». Похоже, ваша стратегия слияния предполагает перебазирование и перезапись коммитов. Не о чем беспокоиться; в конечном итоге сборщик мусора (вероятно) очистит висящие ссылки. На изображении недостаточно информации, чтобы реально увидеть, что происходит. Было бы полезно предоставить вывод git log --oneline --graph
или аналогичный или найти хорошее графическое представление дерева коммитов, которое показывает больше, чем предоставленное вами изображение.
Обратите внимание, что «удаляет ветку панели навигации» может не делать то, что вы думаете. git
довольно консервативен в отношении фактического удаления данных. Когда ветка «удаляется», ни один из коммитов фактически не удаляется из репозитория. Этого не произойдет до тех пор, пока цикл сборки мусора фактически не удалит висячую ссылку, чего может не произойти в течение недель, месяцев или никогда.
Предоставленное вами изображение не дает никакой реляционной информации. Можете ли вы вместо этого заменить его скриншотом из gitk --all
?
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.
Судя по вашему журналу 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.
Спасибо за ваш интерес. Что я могу сделать, чтобы предотвратить эту ситуацию? Я не хочу видеть дублированные сообщения о коммитах в истории коммитов.
@ sevro49 Не используйте Github для объединения истории с быстрой перемоткой вперед.
Я обновил ответ информацией о том, как избежать дублированного коммита.
@Раниз большое спасибо за помощь!
Если это решило вашу проблему, отметьте это как ответ :)
Вы объединяете PR, когда объединяете PR?