Примирить коммиты с разными хешами - PullRequest
3 голосов
/ 16 марта 2020

Сюжет: у меня есть локальные develop и master филиалы. develop имеет около 90 коммитов перед master, порожденным ~ 6 месяцев назад.

Я выполнил команду git filter-branch -f --index-filter 'git rm --force --cached --ignore-unmatch media/*' -- --all, которая переписала больше истории git, чем я ожидал, на обоих ветви. Это, из-за того, что делает команда, фактически сделало gazillion git операций, что оставило мой git reflog бесполезным.

Я легко восстановил ветвь master простым git reset --hard origin/master, но мой develop ветвь в очень плохой форме.

Теперь, очевидно, хэши коммитов между master и develop не совпадают, что заставляет git думать, что у меня есть gazillion коммитов в pu sh и gazillion совершает перетаскивание из / в мой remote/develop (должно быть 0 коммитов для вытащения, ~ 90 коммитов в pu sh)

Есть ли способ, которым я могу сделать git "примирить" все коммиты от master и develop? Это должно быть что-то вроде:

for commit in commits_in_master:
    tmp = search_by_commit_autor_and_date_and_message_in_develop(commit)
    tmp.hash = commit.hash
    tmp.save()

Редактировать:

Если то, что я спрашиваю, невозможно, могу ли я (как-то) извлечь только ~ 90 коммитов, которые не были переданы origin/develop, затем git reset --hard origin/develop моя develop ветвь и затем применить эти ~ 90 коммитов?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Перед запуском filter-branch, Git создает резервную копию всех ваших текущих руководителей филиалов. Они хранятся в пространстве имен refs/original. Вы можете сбросить свои ветви так, чтобы они снова указывали на старые головы (резервная копия вашего полного хранилища не повредит перед сбросом ваших ветвей. Лучше быть в безопасности, чем потом сожалеть):

git branch -f develop original/refs/heads/develop

Пространство имен original имеет тот же макет, что и у вашего обычного каталога refs.

1 голос
/ 16 марта 2020
git fetch -u . '+refs/original/*:*'
git reset --hard

вернет все в его зафиксированное состояние до ветви фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...