我已经尝试了将近一天的时间来找到处理这种情况的最佳方法,但是即使我发现并理解了有关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命令的示例将不胜感激
预先感谢每一个提示/资源或建议。
答案 0 :(得分:3)
首先,“子分支”纯粹是您的概念,在git中,所有分支都是相等的,没有跟踪分支之间的关系(仅当执行类似查找公共合并库之类的操作时,提交才如何相关)。
您需要做的就是将develop
合并到feature-branch
。
假设其他人将更改推到了这些分支中的一个(或其他)中(使用git fetch
和git 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)
当有新的更改被推动以开发分支时(如下图所示的提交I
,J
和K
)
A--B--C--D--I--J--K (develop)
\
E--F--G (feature-branch)
\
H (sub-branch)
您可以使用以下步骤使功能分支保持最新状态:
执行以下命令以重新设定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)
使用以下命令重置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)