Ответвление от мастера, но включение изменений из другой не объединенной ветки - PullRequest
2 голосов
/ 26 мая 2020

У меня есть функциональная ветка, которая еще не была объединена. Мне нужно создать новую ветку из Master, но я хочу, чтобы она также включала изменения из моей еще не объединенной ветки функций.

Я не хочу ответвляться от своей ветки функций, как я могу это сделать это?

master 
     ~ branch A (not yet merged)
     ~ branch B (new branch which includes changes from branch A)

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

Когда я в конечном итоге объединю ветку B после ветки A, изменения должны быть только показать изменение ветви B, поскольку ветка A уже была объединена - это правильно?

1 Ответ

1 голос
/ 26 мая 2020

Специальной подготовки не требуется. Вы можете

# master is checked out
git checkout -b B
git merge A

или

# A is checked out
git checkout -b B
git merge master

В обоих случаях ваша новая ветвь B заканчивается «ответвлением от мастера» и с новыми изменениями из A. После того, как A объединяется с master, разница между master и B больше не будет отображать содержимое A как разное, поскольку эти коммиты теперь находятся в истории обеих веток. Более позднее слияние B будет включать / добавлять только те коммиты, которые произошли для этой новой функции.

Полный пример, начиная с пустого каталога:

# 1st commit
git init
echo "foo" >> foo
git add -A
git commit -m "foo"

# Branch A
git checkout -b A
echo A >> A
git add -A
git commit -m "A"

# Branch B on top of A
git checkout -b B
echo B >> B
git add -A
git commit -m "B"

# More development on master
git checkout master
echo bar >> bar
git add -A
git commit -m "bar"

# First, B "contains" both A and B changes
git diff B

# But after merging A...
git merge A

# ...Diff B now only shows "remaining" changes
git diff B
...