Очистка истории репозитория Git - попробуйте BFG шаг за шагом - но PR имеет гораздо больше различий - и как проверить, удален ли пароль из истории - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь удалить пароли из своей истории Git-репо (я давно удалил пароли из своего Git-репо вручную, но не из истории, и на этот раз пытаюсь очистить всю историю моего Git-репо)

И для того же, начал с разветвления основного репо, прошел и следовал шагам - BFG Repo-Cleaner и попытался искать в StackOverflow как this

Все выглядит хорошо со всеми шагами, выполняемыми в локальном репозитории Git, и последний - git push, но после этого я не вижу коммитов в моем разветвленном репо, хотя я вижу это сообщение This branch is 853 commits ahead, 853 commits behind, и это дает возможностьсоздать PR (а также сравнить), и в этом PR я вижу много различий [как новый файл, который был создан некоторое время назад, и все еще существует в текущей версии], который не имеет ничего общего спароль я пытаюсь заменить.

Версия Git - 2.21.0

Ответы [ 2 ]

3 голосов
/ 20 октября 2019

Вместо BFG, попробуйте новый git filter-repo, который заменит старый git filter-branch или BFG

Пример:

Чтобы заменить текст «пароль» на «p455w0rd»:

git filter-repo --replace-text <(echo "password==>p455w0rd")

Но конечный результат будет таким же: новая история коммитов, не только для вашей текущей ветви, но и для все ветви (где был найден ваш пароль)
Это означает git push --all --force, чтобы переопределить историю удаленного хранилища.

Если пароль был добавлен только в ветке PRзатем удалите, отфильтруйте только эту PR-ветку вместо всего, затем переберите новую историю поверх upstream/master

До удаления пароля:

        u--u--u     (upstream/master)
       /
x--x--x             (master)
       \
        pr--pr--pr  (pull-request branch)

После удаления пароля, используя --refs pr(замените 'pr' на имя вашей ветки pull-запроса: git filter-repo --replace-text <(echo "password ==> p455w0rd") --refs pr)

        u--u--u     (upstream/master)
       /
x--x--X             (master)
      |\
      | pr'--pr'--pr'  (new pull-request branch)
       \
        pr--pr--pr  (old pull-request branch)

Youнужно перебазировать эту новую ветку поверх upstream / master, предполагая, что upstream - это исходный репозиторий туда, где вы находитесьg PR.

git fetch upstream
git switch pr
git rebase upstream/master

Тогда PR будет включать только ваши коммиты, а не все коммиты с начала времени.

0 голосов
/ 20 октября 2019

Вы использовали BFG Repo-Cleaner, чтобы полностью переписать свою историю мерзавцев. Если вы уверены, что это именно то, что вы хотите сделать, вы не хотите использовать пул-запрос для объединения вашей ветки с master. Вы хотите принудительно отправить каждую ветку обратно на GitHub. Это требует незащищенности всех защищенных веток. (Мастер обычно защищен). Если это не ваш личный репозиторий, вы должны убедиться, что с вами все в порядке. Будьте очень осторожны, если вы этим занимаетесь.

Если вы уверены, что хотите это сделать. Вот команды, которые вам понадобятся:

git checkout <branch> #do this for every branch on your guthub repo
git push origin --force
...