Форум программистов, компьютерный форум, киберфорум
Наши страницы
Системы контроля версий
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
artem78
4 / 4 / 2
Регистрация: 20.12.2012
Сообщений: 470
Завершенные тесты: 1
1

Исправить расхождение веток

12.03.2019, 20:27. Просмотров 1012. Ответов 8
Метки нет (Все метки)

После череды многократных изменений существующих коммитов с применением git rebase -i возникла ситуация, когда ветки разошлись. Так выглядит репозиторий на данный момент:
Исправить расхождение веток


А должно быть так:
Исправить расхождение веток


Сделать откат по reflog-у проблематично по причине того, что впоследствии было много изменений в текущих коммитах. Ситуация также осложняется тем, что один из изменённых впоследствии коммитов, уже был отправлен на github. Как можно наиболее безболезненно привести репозиторий к правильному виду, при этом желательно избежав многочисленных конфликтов слияния?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2019, 20:27
Ответы с готовыми решениями:

Слиение веток
В моем проекте есть три ветки две з которих изменялись двумя раз ними програмистами. И их нужно...

Слияние веток
Добрый день! Такой пример: Работа над проектом идет в ветке br1. В какой-то момент создается из...

SVN Слияние веток
Как правильно слить изменения из основной ветки в ответвление, при этом не теряя изменения которые...

Ручное слияние веток
Доброго времени суток! Работаю в Visual Studio 2017. Использую TortoiseGit 2.7.0.0. Столкнулся с...

Удаление изображений из истории всех веток
Как удалить физически из истории всех веток все изображения, кроме тех, которые в определённой...

8
Rius
Эксперт .NET
6012 / 3870 / 936
Регистрация: 25.05.2015
Сообщений: 11,752
Записей в блоге: 12
Завершенные тесты: 4
12.03.2019, 20:52 2
А репозиторий на гитхабе ваш? Если да, можно просто запушить как есть. Проблемы будут только там, где имеется другой клон с гитхаба.

Добавлено через 3 минуты
Продублированные коммиты (92652012 / 8d822804 / 6806aec6 и 065f37ad / af20d032 / 90838fda) чем-то отличаются между собой? Помимо хеша.
0
artem78
4 / 4 / 2
Регистрация: 20.12.2012
Сообщений: 470
Завершенные тесты: 1
12.03.2019, 21:57  [ТС] 3
Цитата Сообщение от Rius Посмотреть сообщение
А репозиторий на гитхабе ваш?
Да. Он приватный, кроме меня его больше никто не использует.

Цитата Сообщение от Rius Посмотреть сообщение
Если да, можно просто запушить как есть.
Но сперва нужно как-то решить проблему в локальном репозитории.

Цитата Сообщение от Rius Посмотреть сообщение
92652012 / 8d822804 / 6806aec6
Цитата Сообщение от Rius Посмотреть сообщение
065f37ad / af20d032
diff у этих коммитов идентичный. А вот 90838fda на гитхабе - это старая версия 065f37ad и af20d032.
0
Rius
Эксперт .NET
6012 / 3870 / 936
Регистрация: 25.05.2015
Сообщений: 11,752
Записей в блоге: 12
Завершенные тесты: 4
12.03.2019, 22:19 4
В локальном репозитории проблемы нет. Просто сделайте
Bash
1
git push - - force <remote> <branch>
Если бы были другие пользователи, тогда да,стоило повозиться, чтобы привести к последовательным изменениям.
Ну или из теоретического интереса.

Добавлено через 1 минуту
Если гитхаб откажется заменять коммиты в ветке мастер, то это где-то в настройках указывается - защита веток от перезаписи.
1
12.03.2019, 22:19
artem78
4 / 4 / 2
Регистрация: 20.12.2012
Сообщений: 470
Завершенные тесты: 1
12.03.2019, 22:30  [ТС] 5
Цитата Сообщение от Rius Посмотреть сообщение
В локальном репозитории проблемы нет
Не совсем. После коммита Кнопка "Удалить все" для файлов от ветки master должна отпочковываться emails_parsing (пока её мержить не буду). Вместо этого 2 коммита из master попали в emails_parser. На втором скриншоте в первом сообщении я показал как должно быть.
0
Rius
Эксперт .NET
6012 / 3870 / 936
Регистрация: 25.05.2015
Сообщений: 11,752
Записей в блоге: 12
Завершенные тесты: 4
12.03.2019, 22:39 6
Лучший ответ Сообщение было отмечено artem78 как решение

Решение

Вы их видите только потому, что гит сохранил ссылку на исходный коммит в мастере, и тот, что вы туда позже отправили.
Запушите с force и всё свернётся.

Добавлено через 1 минуту
Если это чисто дубликаты, можно удалить их ребейзом.
0
artem78
4 / 4 / 2
Регистрация: 20.12.2012
Сообщений: 470
Завершенные тесты: 1
12.03.2019, 22:47  [ТС] 7
Цитата Сообщение от Rius Посмотреть сообщение
можно удалить их ребейзом.
Не подскажите, как сделать rebase не всей ветки, а только начиная с определённого коммита?
0
Rius
Эксперт .NET
6012 / 3870 / 936
Регистрация: 25.05.2015
Сообщений: 11,752
Записей в блоге: 12
Завершенные тесты: 4
12.03.2019, 23:07 8
В вашем случае ребейз всей ветки на ветку мастер. Гит должен сам пропустить одинаковые коммиты.
Если не получится, то интерактивный ребейз на мастер, при котором вручную отметить коммиты для удаления.
1
artem78
4 / 4 / 2
Регистрация: 20.12.2012
Сообщений: 470
Завершенные тесты: 1
12.03.2019, 23:26  [ТС] 9
Rius, Сделал ребейз и, действительно, дубли коммитов самоустранились! Не знал про такую особенность. Push с опцией force тоже всё правильно обновил на гитхабе. Проблему решил, большое вам спасибо.
0
12.03.2019, 23:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2019, 23:26

Не отображается список веток после git clone
После клонирования репозитория с сервера, вывод комманды git branch не отображает никаких веток,...

Расхождение с версиями 8.2 и 8.3
На платформе 1С 8.2 (Документооборот) код работал исправно, как обновили платформу до 1С...

Откуда расхождение в графиках
Нужно построить графики для функции и ее разложения Функция:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru