Как перенести работу в новую ветку и удалить всю историю коммитов? - PullRequest
0 голосов
/ 13 сентября 2018

Я по-королевски испортил ветку.

Я грохнул ключом и слил / вытащил / раздавил, и я не знаю, что еще.

Вся работа над моимветвь функции должна быть в 1 коммите

Я хочу сохранить, где находится моя работа, но я не хочу 10 историй коммитов.

Я больше не могу сдавить коммиты, поскольку есть конфликтыи это просто стало таким беспорядком.

Сквош больше не является опцией, потому что git rebase-i HEAD ~ 2 Я сделал слияние в какой-то момент и не могу этого сделать - потому что в серединеиз-за перебазирования мои изменения не могли быть применены, потому что я кое-как отстал от пульверизатора - я, должно быть, сделал это неправильно.

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

Каков наилучший способ сделать это?Также не могли бы вы объяснить решение, как я 5, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Если у вас есть все необходимые файлы в вашем рабочем каталоге, вы можете просто стереть текущий git-репозиторий и создать новый:

rm -rf .git
git init
git add .
git commit -m "initial commit"

Что вы также можете сделать, если хотите сохранитьreflog intact - использовать reset как дешевый способ перебазирования.Выясните хеш вашего первоначального коммита, сбросьте его, смешав с ним, сохраняя все изменения в вашем рабочем каталоге, а затем подтвердите --amend, чтобы добавить эти изменения в начальный коммит:

# find out the id of your first commit
git rev-list --max-parents=0 --abbrev-commit HEAD

# reset to it
git reset --mixed <first commit id>

# add files to index and amend
git add .
git commit --amend -m "initial commit"
0 голосов
/ 13 сентября 2018

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

git checkout --orphan foo abc123
git commit

Теперь у вас есть foo, и у него есть только один коммит, который имеет те же файлы с abc123. И тогда вы можете удалить старую ветку.

git branch -D <old_branch>

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

...