Git Branch Off A Branch

时间:2015-12-15 23:43:42

标签: git github

我正在掌握主人并创建分支'A'。

分支'A'包含HTML / CSS / JS以创建'小部件'。

在审核此代码时,我还想为这个“小部件”创建测试。

由于分支'A'尚未合并,我无法继续掌握。但我需要一种方法来处理分支'A'而不对其进行更新,同时正在审查代码以推送到主控。

我想我需要从分支'A'中删除分支'B',以便我可以继续处理我已创建的代码。

问题1.如何在git中执行此操作?

问题2.一旦我将分支'A'合并到主人,即使我还没有完成,它还会包括分支'B'吗?

问题3.我可以独立于分支'A'合并分支'B'吗?

2 个答案:

答案 0 :(得分:6)

  

问题1.如何在git中执行此操作?

git checkout branch_a
git pull
git checkout -b branch_b

然后,您将在新branch_a中获得branch_b的提交。

  

问题2.一旦我将分支'A'合并到主人,即使我还没有完成,它还会包括分支'B'吗?

不,它们是完全独立的分支,因此只有来自branch_a的提交才会存在于主数据库中。

  

问题3.我可以独立于分支'A'合并分支'B'吗?

这里有一个双管齐下的方法。如果你想随身携带branch_a次提交,那么你可以随时将branch_b合并到主人中,虽然这种目的无效。

鉴于branch_b的测试可能取决于branch_a,在A之前合并B似乎很愚蠢。

一旦你将A合并到master中,你可能需要将branch_b重新绑定到新的master上,并删除你从branch_a接管的所有原始提交,因为它们现在都是存在于主人:

# Assume A merged into master
git fetch
# Rebase interactively
git rebase -i origin/master
# Exclude (skip or comment out) the commits that were from A, leaving only B
# Rebasing (n/n).....
git push origin branch_b --force

这将为您提供一个来自master的新branch_b,其中A的提交现在存在,当您将B合并到master中时,您不会有合并冲突。

只有在您已将branch_b推送到原点时才需要强制推送。如果你没有,没问题。

答案 1 :(得分:3)

这很简单 - 你可以在git中的任何分支创建一个分支。

如果你在分支A上,只需做git checkout -b B,你就会有一个从A开始的新分支。它将与A分开,而A的变化将不会反映在B中。

当A合并为master时,合并不会引入B上的提交。

您无法独立管理B - 分支B还包含创建时A上的提交,因此合并B也会引入这些提交。可以使用交互式rebase或者樱桃选择来引入B(没有A)的变化,但这是相当高级的,可能不是你想要做的。

您还想做的另一件事 - 一旦您分支B,您可能最终会因为您的代码审核而对A进行更改。一定要在A之上重新定义B以保持最新状态,否则当你将测试合并到master中时,你会有一些痛苦。