Как сжать последовательные объекты фиксации в один?

Мой график объектов git выглядит следующим образом. Я хочу объединить коммиты 2fb14b7, 39224ad, fe9252d и 3e7a060 в один коммит.

* 650c464        (temp) adding hw2.txt
| * dd3674a      (master) added hw3
| | * 8dc0857    (FIX_REVIEW_COMMENTS) added hwa
| |/  
| * c39d943      hw2 added in master
| | *   e2a1c13  (HEAD, refs/stash, trying_to_squash) WIP on temp: 2fb14b7 hw7
| | |\  
| | | * 429b1de  index on temp: 2fb14b7 added hw7
| | |/  
| | * 2fb14b7    <-- added hw7
| | * 39224ad    <-- (another_branch) added hw3
| | * fe9252d    <-- hw2 added in master
| | * 3e7a060    <-- adding hw2.txt
| |/  
|/|   
* | ba55177      (old_fixes) added hw4
|/  
* a1ede1f        added another hello world to hw1
* 2ea750a        added hw1

Ниже то, что я пробовал (и не понял, почему это не сработало).

Q1. Почему это не сжимается?

$ git checkout 2fb14b7 -b try_to_commit
$ git merge --squash 3e7a060
 (nothing to squash)Already up-to-date.
$

Вопрос 2. Что это делает с моим хранилищем?

$ git rebase --interactive 3e7a060
$ # I choose pick for the first commit object, and squash for the rest
$ # but somehow this complicates my repository graph even more!

person Moeb    schedule 26.05.2013    source источник
comment
Вы имеете в виду «2fb14b7, 39224ad, fe9252d и 3e7a060»?   -  person GoZoner    schedule 27.05.2013
comment
@Moeb, можете ли вы объяснить, что вы подразумеваете под интерактивной перебазировкой, еще больше усложняющей график вашего репозитория?   -  person    schedule 27.05.2013
comment
@ColdHawaiian: он создал новые ветки вместо того, чтобы упростить мой репозиторий.   -  person Moeb    schedule 27.05.2013
comment
причина этого в том, что у вас есть некоторые изменения, спрятанные в старом HEAD. вытащите тайник, и ваш график репо снова будет выглядеть красиво.   -  person Chronial    schedule 27.05.2013
comment
@Moeb, можешь потом показать, как выглядит твой график коммитов?   -  person    schedule 27.05.2013


Ответы (1)


Обновление от 2021 года (8 лет спустя): вы должны больше не использовать git checkout, а git switch

git switch -c try_to_commit 2fb14b7 

Почему это не сжимается?

Поскольку вы объединяете родительский (прошлый) коммит (3e7a060) с новым 2fb14b7

| | *   e2a1c13  (HEAD, refs/stash, trying_to_squash) WIP on temp: 2fb14b7 hw7
| | |\  
| | | * 429b1de  index on temp: 2fb14b7 added hw7
| | |/  
| | * 2fb14b7    <-- added hw7                   (more recent commit)
| | * 39224ad    <-- (another_branch) added hw3
| | * fe9252d    <-- hw2 added in master
| | * 3e7a060    <-- adding hw2.txt              (past old commit)

Я бы предпочел создать ветку в прошлом коммите и объединить более поздний коммит:

git switch -c try_to_commit 3e7a060
git merge --squash 2fb14b7    

Что это делает с моим хранилищем?

 git rebase --interactive 3e7a060

Он пытается воспроизвести текущую ветку try_to_commit поверх 3e7a060: это должно позволить выбрать/сжать коммиты, но не забудьте затем воспроизвести e2a1c13 поверх воспроизведенной ветки.

Я бы предпочел перебазировать всю ветку try_to_commit, созданную из e2a1c13 вместо 3e7a060, и используя параметр Git 2.18, Q2 2018, --rebase-merges:

git switch -c try_to_commit c39d943
git rebase --rebase-merges --interactive 3e7a060

Обратите внимание, что сообщение (nothing to squash)Already up-to-date изменится с git 2.32 (второй квартал 2021 г.): несколько вариантов информационного сообщения Already up-to-date были перефразированы.

См. commit ad9322d (2 мая 2021 г.) от Джош Сореф (jsoref).
См. коммит 80cde95 (2 мая 2021 г.), автор Эрик Саншайн (sunshineco).
(Объединено Юнио С. Хамано -- gitster -- в commit 5feebdd, 11 мая 2021 г.)

merge: исправлена ​​замена обновленных компонентов сообщения.

Соавтор: Эрик Саншайн
Подписано: Джош Сореф
Подписано: Эрик Саншайн< / суп>

Переписанный git-merge(man) из оболочки в C в 1c7b76b (сборка в слиянии, 07 июля 2008 г., Git v1.6.0-rc0 -- merge) случайно преобразовал сообщение:

Already up-to-date. (nothing to squash)

to:

(nothing to squash)Already up-to-date.

из-за перевернутых printf() аргументов.

Эта проблема осталась незамеченной, несмотря на то, что на протяжении многих лет ее затрагивали:

  • 7f87aff (обучение/исправление параметров pull/fetch -q/-v, 2008–11 -15, Git v1.6.1-rc1 -- слияние)
  • bacec47 (i18n: git-merge основные сообщения, 22 февраля 2011 г., Git v1.7.5 -rc1 -- объединить)
  • по касательной от bef4830 (i18n: слияние: помечать сообщения для перевода, 17 июня 2016 г. , Git v2.10.0-rc0 -- слияние, указанное в пакет №5)
  • 7560f54 (treewide: исправить несколько , 23 августа 2017 г., Git v2.15.0- rc0 -- слияние, указанное в пакет № 7) (в древовидной структуре: исправить несколько обновлений до актуальности, 23 августа 2017 г.).

Исправьте это, восстановив сообщение в предполагаемом порядке.

person VonC    schedule 15.05.2021