我们严格不遵循Jitkins管道代码的Gitflow工作流程。
有一个来自X
的分支master
,其他技术人员当前正在使用该分支进行自己的更改。未来几周,分支X
上将有许多提交。
+----+------------- master
\
\
-----------X (currently used by Developer A)
我的经理要求我在分支Y
上创建另一个分支X
,以进行自己的更改。在我每天开始在分支X
上进行编码之前,我需要确保分支Y
在我的分支中是最新的。
但是,问题是我每天都需要合并分支X
以保持最新,这会导致合并冲突。在创建任何分支Y
之前,我得到以下错误:
$ git branch
master
* X
$
$
$ git pull origin X
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
$
在与分支X
较少合并冲突的情况下,在我自己的分支上工作的最佳方法是什么?
答案 0 :(得分:5)
在与分支X发生较少合并冲突的情况下在自己的分支上工作的最佳方法是什么?
使用短暂的,集中的功能会从X分支分支出来。仅仅因为其他人都不意味着您就不能这样做。在X上使用短暂的特征分支可以最大程度地减少X与特征分支的偏离,并减少冲突。
建立一个分支,在您的分支中实现一件事,并在X漂移得太远之前尽快将其合并到X中。理想情况下,您的分支机构应该持续数天甚至数小时。
完成任务并合并分支后,请勿重复使用它。删除它。为下一个任务在X上新建一个分支。
用于处理此问题的工作流程与从master分支相同,只是您从X分支。
这是您的存储库的示意图,其中Y分支了X。Y已过时。
A - B [origin/master]
\
C - D - G - H [origin/X]
\
E - F [Y]
您已将Y设置为跟踪origin/X
。
$ git branch -u origin/X Y
Branch 'Y' set up to track remote branch 'X' from 'origin'.
我建议您重新定基础,而不是与上游分支合并以进行更新。这将使您的历史记录更加整洁,并使合并处理变得更加简单。运行git pull --rebase
。 Git不会获取并合并,而是会获取并重新设置基础。这样会在最新版本的X上重播每个提交。
A - B [origin/master]
\
C - D - G - H [origin/X]
\
E1 - F1 [Y]
就好像您一直在使用最新的X一样。这样可以避免造成很多混乱和不必要的“更新合并”。
这也使合并冲突的管理更加容易。不必一次用X处理所有合并冲突,您可以逐个提交地处理它们。首先,您处理E和X之间的冲突,然后处理F和X。每次提交将冲突分开,可以更轻松地了解冲突和原因。
您可以在.gitconfig
中将其设置为默认值。确实需要一些习惯。
[pull]
rebase = preserve
是合并还是变基,解决冲突是相同的基本过程。解决Git中的冲突就像同事打电话给您以帮助进行编辑一样。 Git将尽可能合并并分阶段(git add
)工作。当遇到无法解决的问题时,它会编辑文件以显示conflict markers无法解决的问题,并将这些位暂存,并要求人员(您)来解决。您编辑文件以修复它们,暂存(git add
),然后告诉Git使用git rebase --continue
继续进行下一次提交。
或者认为一切都出了问题,而您想从git rebase --abort
开始。
功能完成后,将Y合并为X(或让Bob这么做),删除Y,然后为下一个功能从X开始新的分支。
母版有一个分支X,其他技术人员当前将其用于自己的更改。未来几周X分支上将有许多提交。
现在除了为什么长期活着和个人分支机构是一场噩梦之外,还有个好地方。
要素分支具有明确定义的目的和明确的合并点。相反,个人分支机构没有重点。它们可以包含Bob如今正在处理的所有内容。他们没有尽头。它们成为寿命长的分支。
万岁的树枝是一场噩梦,最好避免。随着它们与master
的差异越来越大,它们将接受越来越多不相关的更改,并且合并的可能性越来越小。为了使它们与master
保持最新(如果他们不愿意这样做),必须进行越来越多的工作,并且越来越多的工作必须用于管理分支机构的分支。
最糟糕的是长期存在的个人分支。它包含Bob一直在从事的工作。谁知道那里有什么变化?他们都应该做什么?做他们的工作?这些变化是好是坏?这正是鲍勃决定要做的。合并是对鲍勃的信心的全部或全部飞跃。
如果可能,请尽快关闭分支X,避开个人分支,然后转而使用short lived, clearly defined feature branches。好的分支机构管理已经足够困难了。每个人的生活都会因此而变得更好。