Публичное хранилище Github испортилось после переписывания истории - PullRequest
0 голосов
/ 30 августа 2018

У нас есть проблема с нашим общедоступным репозиторием GitHub lyrgard / ffbeEquip , для которой я большой вкладчик.

Недавно главный сопровождающий и разработчик Лиргард понял, что его рабочий электронный адрес использовался в некоторой информации о коммите.

Следовательно, он следовал этому полезному сценарию Github , чтобы заменить все рабочие письма своим личным. Таким образом, история git была полностью переписана. Мы знаем конечно, это не то, что нужно делать слегка. Но он не мог рисковать, если его рабочий адрес был связан с его хобби-проектом.

Однако проблема в том, что теперь у нас есть несколько прошлых коммитов. Даже мои коммиты показываются дважды!

Сценарий Github ничего об этом не говорит. Мы пытались найти ответы в Интернете, но не смогли найти ничего полезного. Мы не являемся экспертами в git, я уверен, что вы уже поняли.

Что мы на самом деле пробовали:

Нам бы очень хотелось понять, что произошло, какова текущая ситуация и как мы можем ее разрешить.

Большое спасибо за вашу помощь.

[Первое редактирование, чтобы добавить детали]

Вот вывод git log на мастер:

commit b2d98cb6674b0a9d2c457cdcf5bf7dc1271d87c5 (HEAD -> master, origin/master)
Author: Lyrgard <lyrgard@gmail.com>
Date:   Thu Aug 30 06:55:43 2018 +0200

    added Golden Apple to recently released items

commit 850244a19880ddcbc0637a17ab01241d6ef0133a
Merge: 362d9a14 ef8c6e12
Author: Lyrgard <lyrgard@gmail.com>
Date:   Thu Aug 30 06:53:18 2018 +0200

    Merge branch 'master' of https://github.com/lyrgard/ffbeEquip

commit 362d9a1409470bd498e5787daa7817400aedd5f1
Merge: 99618a7e 1bca87ad
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:04:46 2018 +0200

    Merge branch 'Indigo744-encyclopedia_killers'

commit ef8c6e125e6d76d04a0fe28e74fce5439bc4f9f2
Merge: 09722cee 8c1b8394
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:04:46 2018 +0200

    Merge branch 'Indigo744-encyclopedia_killers'

commit 1bca87ad243079e0df0599a8e8e414b75b580f68
Merge: 99618a7e 4ce21f1e
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:02:28 2018 +0200

    Merge branch 'encyclopedia_killers' of https://github.com/Indigo744/ffbeEquip into Indigo744-encyclopedia_killers

commit 8c1b83944ade8dbc1eaf1576df00c8e4c46a051b
Merge: 09722cee 5fc10187
Author: Lyrgard <lyrgard@gmail.com>
Date:   Wed Aug 29 23:02:28 2018 +0200

    Merge branch 'encyclopedia_killers' of https://github.com/Indigo744/ffbeEquip into Indigo744-encyclopedia_killers

Как видите, есть два Merge branch 'Indigo744-encyclopedia_killers' и два Merge branch 'encyclopedia_killers' of...

Конечно, коммита ша не равны (иначе, я думаю, это было бы огромной проблемой), но я не могу понять, почему существует несколько коммитов?

[Второе редактирование, чтобы добавить больше подробностей о что произошло]

После обсуждения с @matthiasbe в комментариях и тщательного изучения ветки git (и обсуждения с Lyrgard) вот что на самом деле произошло:

  1. Он клонировал репо в чистый временный
  2. Он использует скрипт github filter-branch в этом репо, чтобы переписать историю
  3. Он отправляет всю новую историю на GitHub.
  4. Удалить временное репо. Сейчас все хорошо
  5. Ложился спать. На следующее утро зайдите в свой обычный репо, вытащите изменения из Github
  6. Поработайте над этим, совершите коммит и отправьте на Github. на самом деле это уже не так хорошо

Теперь у GH есть две истории (старая и новая), потому что во втором (обычном) репо он должен был перебазировать или удалить и клонировать новую.

Теперь, когда мы знаем, что произошло, мы должны иметь возможность отменить это слияние из истории

Я смотрю на команду rebase -i, но не могу найти коммит слияния. Буду признателен за помощь.

1 Ответ

0 голосов
/ 30 августа 2018

Хорошо, все вернулось на круги своя.

На самом деле нас спасло то, что у Лиргарда все еще был временный репозиторий, который он использовал для filter-branch. Это был «чистый» репо, то есть только с новой историей, но датированный вчерашним днем ​​(т. Е. Пропущенные сегодняшние коммиты).

Что мы сделали:

  1. Сохраняет все новые коммиты дня (они были 3 коммитами) в отдельных файлах патчей.
  2. Клонировать временное "чистое" репо в другое
  3. Применять патч и фиксировать каждый раз (с одним и тем же сообщением)
  4. Сила толкнуть этот репо в Github. GitHub теперь чист.
  5. Удалить все остальные локальные репозитории
  6. Клон из Github

Наконец-то ... Спасибо matthiasbe за помощь.

...