Подтвердить что ты не робот

Git - только отжимать последнюю фиксацию на github

В моем локальном репозитории git у меня есть много коммитов, которые включают "секретные" строки подключения: -)

Мне не нужна эта история в github, когда я ее там нажимаю.

По сути, я хочу подтолкнуть все, что у меня есть, но хочу избавиться от целой истории.

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

Я попытался запустить rebase:

git rebase –i HEAD~3

Это вернуло 3 коммита, а затем я смог удалить фиксацию.

Однако побежал на автоматический вишневый захват, и он стал довольно сложным.

Любые мысли очень оценили... неважно, может ли история и начать снова, если это становится слишком тяжелым: -)

4b9b3361

Ответ 1

Вы можете разветкить свою текущую работу, перемотать мастер, а затем вишней - выбрать последнюю фиксацию для мастера:

git branch secret
git reset --hard HEAD~3
git cherry-pick secret

В изображениях

    A--B--C--D--E (master)

после git branch secret:

    A--B--C--D--E (master, secret)

после git reset --hard HEAD~3:

    A--B (master)
        \
         C--D--E (secret)

после git cherry-pick secret:

    A--B--E' (master)
        \
         C--D--E (secret)

Наконец, если вы git checkout secret; git rebase master, вы можете получить:

    A--B--E' (master)
           \
            C--D (secret)

Ответ 2

Сценарий

Вы клонировали проект и делали смешную сумму за новую функцию, и пришло время открыть ее или поделиться ею для обзора. И вы не хотите, чтобы кто-нибудь видел ваш беспорядок фиксации!

Исходная ветвь была cloned_branch, ваши беспорядочные коммиты были на ветке dev, и вы хотите опубликовать свою чистую работу в ветке public_branch.

Предположим, что следующие коммиты:

В ветке cloned_branch:

SHA0: Реализовано X и Y. (автор: authorA)
SHA1: Реализовано Z. (автор: authorA)
SHA2: Реализован W. (автор: authorA)

Вы создали ветвь dev и нажали некоторые коммиты:

SHA3: попытка реализовать функцию Q для работы.
SHA4: дерьмо, я не работаю
SHA5: испортили еще больше!:(
SHA6: СДЕЛАЙТЕ ЭТО РАБОТУ!!!!
SHA7: очистка!

Поместите все эти изменения в одну фиксацию в public_branch:

git checkout SHA2 -b public_branch      # new branch at `authorA` last commit
git merge --squash SHA7        # squash commits up to your last one
git commit -m "Implemented Q (author:me)"

Результат:

Ветви cloned_branch и dev остаются прежними, а ветвь public_branch содержит:

SHA0: Реализовано X и Y. (автор: authorA)
SHA1: Реализовано Z. (автор: authorA)
SHA2: Реализован W. (автор: authorA)
SHA8: Реализован Q. (автор: me)