从当前工作的分支分支-Git

时间:2019-07-07 19:27:59

标签: git git-branch

我们严格不遵循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较少合并冲突的情况下,在我自己的分支上工作的最佳方法是什么?

1 个答案:

答案 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。好的分支机构管理已经足够困难了。每个人的生活都会因此而变得更好。