Как я могу объединить два коммита в один, если я уже начал ребаз? - PullRequest
1091 голосов
/ 02 апреля 2010

Я пытаюсь объединить 2 коммита в 1, поэтому я следовал & ldquo; сжатие коммитов с rebase & rdquo; из мерзавца готов .

Я побежал

git rebase --interactive HEAD~2

В появившемся редакторе я изменяю pick на squash и затем сохраняю-выход, но перебазирование завершается неудачно с ошибкой

Невозможно «сквошить» без предыдущего коммита

Теперь, когда мое дерево работ достигло этого состояния, у меня возникли проблемы с восстановлением. Команда git rebase --interactive HEAD~2 завершается неудачно с

Интерактивный ребаз уже начался

и git rebase --continue завершаются с

Невозможно "сквошить" без предыдущего коммита

Ответы [ 11 ]

1 голос
/ 16 июня 2013

Если ваша основная ветка git log выглядит примерно так:

commit ac72a4308ba70cc42aace47509a5e
Author: <me@me.com>
Date:   Tue Jun 11 10:23:07 2013 +0500

    Added algorithms for Cosine-similarity

commit 77df2a40e53136c7a2d58fd847372
Author: <me@me.com>
Date:   Tue Jun 11 13:02:14 2013 -0700

    Set stage for similar objects

commit 249cf9392da197573a17c8426c282
Author: Ralph <ralph@me.com>
Date:   Thu Jun 13 16:44:12 2013 -0700

    Fixed a bug in space world automation

и вы хотите объединить два верхних коммита, просто выполните следующие простые шаги:

  1. Первый, чтобы быть в безопасности, оформить второй последний коммит в отдельной ветке. Вы можете назвать отрасль как угодно. git checkout 77df2a40e53136c7a2d58fd847372 -b merged-commits
  2. Теперь просто выберите ваши изменения с последнего коммита в этой новой ветви как: git cherry-pick -n -x ac72a4308ba70cc42aace47509a5e. (Разрешить конфликты, если они возникнут)
  3. Итак, теперь ваши изменения в последнем коммите есть в вашем втором последнем коммите. Но вы все еще должны совершить, поэтому сначала добавьте изменения, которые вы только что выбрали, а затем выполните git commit --amend.

Вот и все. Вы можете отправить эту объединенную версию в ветку "Объединенные коммиты", если хотите.

Кроме того, теперь вы можете отменить два последовательных коммита в вашей основной ветке. Просто обновите вашу основную ветку как:

git checkout master
git reset --hard origin/master (CAUTION: This command will remove any local changes to your master branch)
git pull
...