История сквоша фиксируется в толкаемой ветке - PullRequest
1 голос
/ 19 апреля 2019

Фон

У меня есть проект GitHub Я сейчас работаю и одновременно изучаю Git. Сегодня я читал о сжатии с помощью команды rebase и хотел попробовать его на некоторых коммитах, которые я выдвинул несколько дней назад.

Коммиты, с которыми я хочу работать, это 2b16710 и 32fef8e. На моем локальном репозитории основной журнал ветки выглядит так:

* f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
* 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
*   d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (HEAD -> master, origin/master)
|\
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
*   f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek

Как вы можете видеть, после коммитов я создал ветку объектов (enh/12-durability).

Что я пытался сделать

Я попробовал следующий подход - checkout мастер, выполнил экспериментальную ветвь и выполнил следующие команды, чтобы раздавить коммиты.

git rebase -i f699930

Я пометил 2b16710 fixup, и это привело к следующему дереву:

* a7641cc - (2 days ago) [#7] Implements game ticks - KamilPacanek (HEAD -> exp-squash)
| * f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
| * 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
| *   d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (origin/master, master)
| |\
|/ /
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
*   f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek

После этого я сделал несколько различий, чтобы убедиться, что a7641cc содержит те же изменения, что и эти два сжатых, и он это сделал.

Далее я попытался выяснить, как объединить эти изменения с моим master и, наконец, нажать origin, чтобы переписать историю, НО:

  1. Я беспокоюсь о ветке enh/12-durability - я единственный участник, поэтому у меня есть полный контроль над процессом, но сначала я должен знать, как применить новую историю к ветви (или, возможно, мне не пришлось как я собираюсь объединить его с мастером после завершения работы)
  2. Я не знаю, почему он продолжает показывать мне дерево таким образом - я думал, что сквош переписывает коммиты, поэтому вместо двух у меня будет один. Поэтому я думаю, что мне нужно объяснить, является ли мое понимание неправильным или оно будет выглядеть после некоторого силового толчка.

Я хотел добиться примерно так (обратите внимание, что 2b16710 коммит не существует):

* f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
* 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
*   d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (HEAD -> master, origin/master)
|\
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
*   f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek

Я на правильном пути? У меня такое чувство, что мне нужно выбрать некоторые коммиты, чтобы все было правильно ... но я не знаю.

1 Ответ

2 голосов
/ 19 апреля 2019

Вы создали экспериментальную ветку exp-squash и работали над ней.Пока что переписана только история exp-squash.master и enh/12-durability не изменились.

Если вы запустите git rebase -i f699930 на master, график будет выглядеть почти так же, за исключением того, что HEAD->master будет украшать вновь сгенерированный коммит, предполагая abc1234 вот так:

* abc1234 - (2 days ago) [#7] Implements game ticks - KamilPacanek (HEAD -> master)
| * f49573f - (21 hours ago) [#12] Add durability icons - KamilPacanek (origin/enh/12-durability, enh/12-durability)
| * 1c9fec4 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
| *   d68bebe - (2 days ago) Merge branch 'enh/7-introducing-clock-ticks' - KamilPacanek (origin/master)
| |\
|/ /
| * 2b16710 - (2 days ago) [#7] Refactors - KamilPacanek
| * 32fef8e - (2 days ago) [#7] Implements game ticks - KamilPacanek
|/
*   f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek

Таким образом, история master переписывается.Его голова двигается от d68bebe до abc1234.abc1234 содержит те же изменения, что и сжатые 2b16710 и 32fef8e.d68bebe, как коммит слияния и без -p, удаляется.Вам не нужно применять или объединять abc1234 с master, потому что он уже включен в master.

Что касается enh/12-durability или любых других веток, созданных из коммита, более нового, чем d68bebe, вы можете не объединять abc1234 с ними, потому что они уже содержат изменения, эквивалентные abc1234 в истории.

enh/12-durability все еще содержит некоторые коммиты, которые принадлежат старой историиmaster, 32fef8e, 2b16710 и d68bebe.Если позже вы объедините enh/12-durability с новым master, эти коммиты будут снова введены в master.Так что лучше переписать enh/12-durability тоже.

git rebase --onto abc1234 d68bebe enh/12-durability

График будет выглядеть так:

* abc3333 - (21 hours ago) [#12] Add durability icons - KamilPacanek (HEAD->enh/12-durability)
* abc2222 - (21 hours ago) [#12] Move reactor parts handling to ReactorPanel - KamilPacanek
* abc1234 - (2 days ago) [#7] Implements game ticks - KamilPacanek (master)
*   f699930 - (2 days ago) Merge branch 'enh/28-oper-icons-rework' - KamilPacanek
|\
| * ffb3672 - (2 days ago) [#28] Reactor icon animates when reactor is working - KamilPacanek

А затем вам нужно принудительно нажать master и enh/12-durability, чтобыобновите их аналоги в удаленном хранилище.

Последний график, который вы хотите достичь, невозможен.По крайней мере, вы не можете оставить неизменными хеши коммитов после переписывания истории.Независимо от хэшей такой график можно построить с помощью git rebase или git reset --hard и git cherry-pick.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...