Восстановление истории коммитов в GIT без перебазирования - PullRequest
21 голосов
/ 23 февраля 2010

С тех пор, как я задал мой последний вопрос , в котором речь шла о перебазировании с помощью GIT , я решил, что вообще не хочу перебазировать. Вместо этого я хочу:

  1. Branch
  2. Работа, работа, постоянная регистрация и подталкивание
  3. Выбросьте все эти коммиты и сделайте вид, что их никогда не было (поэтому один чистый коммит в конце работы)

В настоящее время я делаю это, копируя файлы в новый каталог, а затем копируя их обратно в новую ветвь (разветвленную в той же точке, что и моя рабочая ветвь), а затем объединяя это в master или где-либо еще.

Это просто плохо и почему? Более важно: есть ли лучший способ / GIT сделать это? git rebase -i заставляет меня слиться (и выбрать, и раздавить).

Ответы [ 2 ]

26 голосов
/ 23 февраля 2010

Самое простое, что нужно сделать - это программный сброс.

Итак, ознакомьтесь с веткой вашей темы:

git checkout -b topic master

работа, работа, работа.

git commit
git commit
git commit
git commit

Доволен этим, вы можете сделать новый одиночный коммит поверх мастера

git reset --soft master
git commit

Теперь объединитесь с мастером (это будет перемотка вперед) и приведите в порядок ветку темы. (Обратите внимание, что вам не нужно делать это, если вы готовы запомнить или пометить, где находился мастер, и просто работать над мастером без ветвления, вы могли бы просто выполнить git reset --soft old-master и git commit, и вам не понадобятся эти этапы очистки.)

git checkout master
git merge topic
git branch -d topic
10 голосов
/ 10 мая 2010

Вы также можете использовать git merge с опцией --squash.

...