Удаление повторяющихся коммитов git, вызванных filter-branch

Я видел это несколько раз, но нет никаких твердых ответов о том, как это решить.

Я пошел и запустил это в своей ветке, чтобы переписать историю авторов:

git filter-branch --env-filter '
OLD_EMAIL = "[email protected]"
CORRECT_NAME = "Your Correct Name"
CORRECT_EMAIL = "[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME = "$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL = "$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME = "$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL = "$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

Затем я выпустил git push --force --tags origin 'refs/heads/*' и подумал, что все прошло хорошо. Пока я не открыл SourceTree и не увидел, что мне нужно вытащить кучу коммитов, я вытащил, а затем нажал, не задумываясь. Вероятно, он сделал еще одно нажатие без --force, и теперь почти все фиксации дублируются.

Я попытался выполнить перебазирование в интерактивном режиме с помощью rebase -i HEAD~, но он упорядочивает коммиты на основе истории предков (или чего-то подобного), что делает практически невозможным раздавить повторяющиеся коммиты, которых на мастере сотни.

Есть ли способ исправить это ответственным образом?

and saw I had a bunch of commits to pull ... похоже, что, возможно, другие все еще добавляли что-то в эту удаленную ветку, пока вы выполняли ветку с фильтром. Либо так, либо вы неправильно git pull перед запуском ветви фильтра. В любом случае, вы не должны были делать это тянуть. По сути, поскольку вы переписали историю ветки, принудительное нажатие - единственное, что вы могли сделать на этом этапе.
Tim Biegeleisen 03.09.2018 07:46

Я не понимаю, что именно произошло, но я знаю, что у меня была последняя копия мастера до того, как я выполнил операцию, и никакие другие пользователи не отправляли изменения в ветку. На самом деле вопрос в том, что с этим делать на данном этапе. Интересно отметить, что rebase -i HEAD также просто возвращает noop.

Michael Brown 03.09.2018 07:50

Я частично беру то, что сказал. Причина, по которой Git сказал, что вы находитесь за удаленной веткой является, потому что вы переписали историю этой ветки. Но вам обязательно нужно нет сделать git pull ... это была большая ошибка. Я не знаю, как это исправить; На вашем месте я бы просто вернулся и начал все сначала.

Tim Biegeleisen 03.09.2018 07:51

действительно большая ошибка.

Michael Brown 03.09.2018 07:52

Вы могли бы просто удалить коммиты, которые были сделаны, когда вы делали git pull. Это предполагает, что вы использовали стратегию слияния, а не стратегию перебазирования.

Tim Biegeleisen 03.09.2018 07:53

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

torek 03.09.2018 07:57

Я попытался использовать rebase -i <commit> и удалить все повторяющиеся коммиты по сообщению (их было много), но в итоге отказался от попытки, поскольку что-то пошло не так. В конце произошел конфликт, и несколько файлов были изменены - я предполагаю, что я удалил коммит слияния с тем же сообщением или чем-то еще. Здесь нет простых ответов.

Michael Brown 03.09.2018 08:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
7
112
0

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