Git:处理子分支

时间:2018-07-17 11:55:36

标签: git github version-control gitlab

我已经尝试了将近一天的时间来找到处理这种情况的最佳方法,但是即使我发现并理解了有关git如何工作的许多知识,我仍然找不到任何“常规”的处理方法和方法。解决以下关于git的情况(由于我缺乏经验)。 在我们的项目中,我们有一个develop分支,并需要从该分支创建一个新的big feature分支,该分支将用于组合将从此Feature分支开始在其他子分支中开发的其他小功能。

A--B--C--D (develop)
          \
           E--F--G (feature-branch)
                  \
                   H (sub-branch)

之所以这样做,是因为我们不希望在整个功能完成之前接触我们的developer分支,同时,如果需要在developer分支中修复一些错误,我们希望能够应用它们。同时,如果要将某些更改(或错误修复)应用于开发分支,我们希望保持feature-branch的最新状态。 所以从这种情况来看

A--B--C--D--I--J--K (develop)
          \
           E--F--G (feature-branch)
                  \
                   H (sub-branch)

我们想要以下内容

A--B--C--D--I--J--K (develop)
                   \
                    E--F--G (feature-branch)
                           \
                            H (sub-branch)

通常,在通过development创建一个简单的功能分支时,我通常将分支重新部署到development上,以移动提交并保持历史记录的清洁。相反,在说明的情况下,我和我的同事们共享功能分支,并从那里创建子分支,因此如何使feature-branch保持最新,并向{{1}添加新提交}分支?是否有可能像我们为本地私人分支机构所做的一样重新设置基准,而没有任何副作用? 任何使用git命令的示例将不胜感激

预先感谢每一个提示/资源或建议。

2 个答案:

答案 0 :(得分:3)

首先,“子分支”纯粹是您的概念,在git中,所有分支都是相等的,没有跟踪分支之间的关系(仅当执行类似查找公共合并库之类的操作时,提交才如何相关)。

您需要做的就是将develop合并到feature-branch

假设其他人将更改推到了这些分支中的一个(或其他)中(使用git fetchgit merge remote/branch可以避免网络往返,但在这里我将使其保持简单):

git checkout develop
git pull
git checkout feature-branch
git pull
git merge develop
# Resolve any merge issues... which may need an explicit git commit
git push

feature-branch现在是最新的,所有更改已提交到develop

如果您要合并develop中的某些更改,则可能需要挑选一些提交。

如果任何主题分支的生存期都超过短期,则可以使用相同的过程来更新最新合并到feature-branch的主题分支。

答案 1 :(得分:1)

当有新的更改被推动以开发分支时(如下图所示的提交IJK

A--B--C--D--I--J--K (develop)
          \
           E--F--G (feature-branch)
                  \
                   H (sub-branch)

您可以使用以下步骤使功能分支保持最新状态:

1。在发展分支的顶部重新分支分支

执行以下命令以重新设定sub-branch

git checkout sub-branch
git pull origin develop --rebase
git push origin sub-branch -f

那么提交历史将是:

                    E'---F'---G'---H' (sub-branch)
                   /
A--B--C--D--I--J--K (develop)
          \
           E--F--G (feature-branch)

2。重置功能分支

使用以下命令重置feature-branch

git checkout feature-branch
git reset --hard G'
git push origin feature-branch -f

那么提交历史将是:

A--B--C--D--I--J--K (develop)
                   \
                    E'--F'--G' (feature-branch)
                             \
                              H' (sub-branch)