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

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

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

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

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

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

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

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

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

Вы объединяете PR, когда объединяете PR?

eftshift0 30.08.2024 14:22

Я думаю, что также возможно выполнить «слияние» с перебазированием поставщиков… это также может это объяснить.

eftshift0 30.08.2024 14:23

Вы не сделали ничего «неправильного». Похоже, ваша стратегия слияния предполагает перебазирование и перезапись коммитов. Не о чем беспокоиться; в конечном итоге сборщик мусора (вероятно) очистит висящие ссылки. На изображении недостаточно информации, чтобы реально увидеть, что происходит. Было бы полезно предоставить вывод git log --oneline --graph или аналогичный или найти хорошее графическое представление дерева коммитов, которое показывает больше, чем предоставленное вами изображение.

William Pursell 30.08.2024 14:31

Обратите внимание, что «удаляет ветку панели навигации» может не делать то, что вы думаете. git довольно консервативен в отношении фактического удаления данных. Когда ветка «удаляется», ни один из коммитов фактически не удаляется из репозитория. Этого не произойдет до тех пор, пока цикл сборки мусора фактически не удалит висячую ссылку, чего может не произойти в течение недель, месяцев или никогда.

William Pursell 30.08.2024 14:37

Предоставленное вами изображение не дает никакой реляционной информации. Можете ли вы вместо этого заменить его скриншотом из gitk --all?

hlovdal 30.08.2024 17:32

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

Community 30.08.2024 18:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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.

Спасибо за ваш интерес. Что я могу сделать, чтобы предотвратить эту ситуацию? Я не хочу видеть дублированные сообщения о коммитах в истории коммитов.

sevro49 02.09.2024 09:51

@ sevro49 Не используйте Github для объединения истории с быстрой перемоткой вперед.

j6t 02.09.2024 13:17

Я обновил ответ информацией о том, как избежать дублированного коммита.

Raniz 03.09.2024 07:34

@Раниз большое спасибо за помощь!

sevro49 03.09.2024 08:45

Если это решило вашу проблему, отметьте это как ответ :)

Raniz 03.09.2024 11:24

Другие вопросы по теме