Git Перебазировать введение коммит слияния - PullRequest
1 голос
/ 09 января 2020

У меня следующая ситуация:

  1. Ветка A
  2. Ветка B, созданная из ветви A, скажем, как commit CommitInitialA
  3. Я делаю несколько коммиты на ветви B говорят: CommitB1 <- <code>CommitB2
  4. Ветвь A получает несколько коммитов параллельно, скажем CommitA1 <- <code>CommitA2
  5. Я запускаю git rebase, так что ветка B имеет линейную историю CommitInitialA <- <code>CommitA1 <- <code>CommitA2 <- <code>CommitB1 <- <code>CommitB2
  6. Теперь в будущем Branch B получает новый коммит, скажем CommitB3, и в параллельная ветвь A получает новый коммит CommitA3

В этот момент, когда я пытаюсь снова перебазировать ветвь B в ветке A, я вижу, что в ветке B есть коммит слияния с CommitInitialA вместо линейная история.

Как мне использовать rebase во второй раз, чтобы я не получал коммит слияния, а вместо этого линейную историю?

По существу, после 2-й перезагрузки после шага 6 выше, я хочу CommitInitialA <- <code>CommitA1 <- <code>CommitA2 <- <code>CommitA3 <- <code>CommitB1 <- <code>CommitB2 <- <code>CommitB3

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы можете попробовать это и увидеть, что нет проблем, если нет конфликта:

git init
git checkout -b branchA
touch inita testb1 testb2 testb3 testa1 testa2 testa3
git add inita
git commit -m "commitInitialA"
git checkout -b branchB
git add testb1
git commit -m "commitB1"
git add testb2
git commit -m "commitB2"
git checkout branchA
git add testa1
git commit -m "commitA1"
git add testa2
git commit -m "commitA2"

На данный момент:

enter image description here

Первый возврат:

git checkout branchB
git rebase branchA

enter image description here

Другие коммиты:

git add testb3
git commit -m "commitB3"
git checkout branchA
git add testa3
git commit -m "commitA3"

На данный момент:

enter image description here

Вторая перебазировка:

git checkout branchB
git rebase branchA

enter image description here

0 голосов
/ 09 января 2020

предположим, что A является главной ветвью, а B - это создание из ветви A, в первый раз оба имеют одинаковый идентификатор фиксации. Предположим,

A = `CommitA1`
B = `CommitB1`

, теперь изменения в обеих ветвях, так что оба имеют один more commit

A перемещается в CommitA2, а B перемещается в CommitB2

, прежде чем объединить ветвь B в ветвь A, нам нужно перебазировать ветвь A с последней ветвью в ветке B

Таким образом, ветвь B будет иметь ниже строки коммита

CommitB2 - your recent commit of branch B on the top
CommitB1 - from current brnanch B2
CommitA2 -from branch A
CommitA1 - from branch A

теперь, если вы не объединяете ветку B с веткой A и продолжаете работать над этой веткой

B, которая переместится в другую. В коммите, у которого есть sh id CommitB3 A, также есть некоторый коммит, например CommitA3

B уже имеет коммиты перед добавлением веткой A, поэтому git pull будет пытаться объединить этот коммит из-за для дублирования кода коммитов в ветви B, чтобы разрешить это.

при повторном перебазировании выдает сообщение типа

и имеет 2 и 2 разных коммита каждый, соответственно

на ветке B вместо pull, вам нужно принудительно отправить sh ваш коммит в вашу ветку, git pull дает вам коммиты, которые уже есть в ветке B из-за перед перебазированием, могут быть изменения коммитов слияния.

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