从 Master 分支出来,但包括来自另一个未合并分支的更改

Branch off Master but include changes from another unmerged branch

我有一个尚未合并的功能分支。我需要从 Master 创建一个新分支,但我希望它还包括我尚未合并的功能分支的更改。

我不想从我的功能分支中分支出来,我该怎么做?

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

我在想我也许应该从 master 分支然后将我的新分支重新设置为分支 A?

当我最终在分支 A 之后合并分支 B 时,更改应该只显示分支 B 的更改,因为分支 A 已经合并 ​​- 这是否正确?

无需特殊准备。你可以

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

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

在这两种情况下,您的新分支 B 都以 "branched off master" 结束,并且具有来自 A 的新更改。在 A 合并回 master 后,masterB 之间的差异将不再将 A 的内容显示为不同,因为这些提交现在在两个分支的历史记录中。 B 的后续合并只会 include/add 那些为该新功能发生的提交。

完整示例,从一个空目录开始:

# 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