2016-03-16 3 views
1

Итак ... Я говорю, пытаясь удалить файл из истории, поскольку в нем содержится пароль (я знаю - должен был быть в gitignore с самого начала!). Я последовал за https://help.github.com/articles/remove-sensitive-data/ в пункт 6, но у меня была проблема с моим ключом SSH, который используется Git Bash (обычно используют sourcetree как хранилище репозитория на BitBucket), который должен был быть исправлен, и теперь у меня есть дубликат всех фиксаций в моей истории (кроме последние два).Git удалить повторяющиеся записи из истории

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

Вот посмотрите на верхней и нижней части моего журнала: Top and bottom of log

Если кто-нибудь может подсказать, как я могу очистить это я очень ценю это.

ответ

1

После замечания agrias прошу

Является ли "Паб-201603141450" филиал?

(Это тег) Я понял, что все мои теги были на старых коммитах. Удаление этих тегов или перенос их в новую версию фиксации удалил старые записи из моей истории. Не будучи знакомым с тегами, я предполагаю, что они имеют свою собственную историю.

Я предполагаю, что если бы у меня не было проблемы с SSH-ключами, и после этого с шагом 7 в https://help.github.com/articles/remove-sensitive-data/ он бы переместил мои теги и избегал этой проблемы.

1

Не пользователь sourcetree, но вы очищаете свою историю с помощью rebase.

git rebase -i HEAD~x 

Где x является обязательным, вы хотите вернуться назад.

Если вы хотите просто визуально очистить свою историю и сохранить фиксации, вы можете использовать опцию squash. Если вы хотите полностью удалить коммиты, вы можете просто удалить коммиты, удалив строки в своем редакторе.

+0

Поскольку оскорбительные коммиты вернутся к первому фиксации, я не могу использовать rebase (если кто-то не может предложить, как я могу), и я подумал, что сквош будет раздавить коммит с его родителем - которые не пересекаются между двумя показанными ветвями , Как удалить выбранные коммиты? – KELF

+0

Есть "Pub-201603141450" филиал? Если да, то как выглядит «git log» для него. Если это выглядит хорошо, вы можете попробовать изменить голову мастера, чтобы указать на голову хорошей ветви. Из внешнего вида на исходном дереве выглядит желтая линия - это собственная ветвь, здесь ключ может проверять эту ветку. –

1

Если количество фиксации не так много, то создание новой ветки и использование git cherry-pick получить фиксацию, которая вам нужна по одному, может быть решением. Вы можете написать сценарий для этого. После его завершения вы можете удалить старую ветку, которую вы не хотите.

Кстати.

Я думал, сквош будет сквош коммит с родительским

Это не правильно, git rebase -i предоставляют несколько вариантов, а не только давя фиксации с его родителем.

Смежные вопросы