Как записать коммиты удаленной ветки в мою локальную ветку? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть удаленная ветвь, назовем ее FIN-985_the_original. У меня есть местное отделение, которое называется FIN-985_v2. FIN-985_v2 это ветка от мастера.

Я сделал две команды, и я запутался, потому что одна дала мне то, что я хочу

Первый - тот, что ниже

git rebase --onto FIN-985_the_original FIN-985_v2

Этот помещает содержимое FIN-985_the_original в FIN-985_v2, проблема заключается в том, что кажется, что содержимое FIN-985_the original заменяется на FIN-985_v2, стирая коммиты, сделанные в FIN-985_v2.

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

git checkout FIN-985_the_original
git rebase FIN-985_v2

Я ожидал, что перебазирование будет сделано на FIN-985_v2, и вместо этого это было сделано на FIN-985_the_original. Из моей команды я знаю, что это имеет смысл, так как проверка была сделана на FIN-985_the_original, но она ошибается в моей логике, поскольку я прочитал this

Любые советы более чем приветствуются, чтобы обезвредить меня.

Приветствия

1 Ответ

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

Базовая перебазировка (ваш второй случай)

Я начну с вашего второго случая, так как это легче объяснить.

git checkout A
git rebase B

спрашивает Gitвзять любые коммиты в A, которых нет в B, и переместить их в конец B.

Пример сценария:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)

Если, пока A извлечен, я делаю git rebase B, я собираю коммиты 4 и 5 (они на A, но не на B) и перемещаю их в конец B:

-- 0 (master)
    \
     1 -- 2 -- 3 (B)
                \
                 4' -- 5' (A)

Так что теперь A будет иметь все коммиты B, сопровождаемыекоммиты A.

В вашем случае коммиты the_original теперь должны быть после коммитов v2, а the_original - ветвь v2, хотя я не уверенэто то, что вы говорите, произошло.

Использование --onto

Когда вы используете --onto, все становится странным.Я начну с checkout снова, потому что ветвь, которая в настоящий момент извлечена, все еще перемещается:

git checkout A
git rebase --onto C B

просит Git взять коммиты, которые находятся на A, но не на B, и переместитьсяих, так же как и без --onto.Но теперь мы дали ребазу пункт назначения: поместили их в конец C.

Давайте добавим C в мой начальный сценарий:

     6 (C)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)
      \
       4 -- 5 (A)

Так как я нахожусь на A, мыВы все еще собираетесь двигаться 4 и 5: они на A, но не на B;но мы разместим их на C, т. е. после 6:

       6 (C)
      / \
     /   4' -- 5' (A)
    /
-- 0 (master)
    \
     1 -- 2 -- 3 (B)

Так что в вашем случае, что должно было произойти, зависит от того, что было проверено перед ребазой: коммиты в проверенной веткеиз того, что не было в v2, должно было быть перенесено в конец the_original.

Я нахожу, что редко хочу --onto, и, честно говоря, я нахожу это достаточно запутанным, чтобы я, вероятно, выбрал вишню коммитоввокруг вместо использования git rebase --onto ...

Педантические заметки

В соответствии с соглашением на https://git -scm.com / docs / git-rebase, я использую 'для обозначения перемещенных коммитов, так как 4' и 5 'являются новыми коммитами, воспроизводящими сами 4 и 5, а не 4 и 5.

Я использую лингвистический ярлык, когда яскажем «перемещено»: коммиты технически не перемещаются, они применяются повторно, создавая новые коммиты, которые более или менее похожи на оригиналы.

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