Git工作流和将更改从主分支合并到分支

4
在我苦苦挣扎于SVN时,有人告诉我应该尝试GIT,因为分支对我想要实现的工作流非常理想。我一直在摸索中,并且现在认为我已经掌握了GIT的基础知识。
我们基本上有一个中央框架,一些客户使用它,我想拥有一个主干/主分支,并像往常一样使用分支进行开发/尝试新功能,但我还想为每个客户创建一个分支,以便我可以针对代码进行特定于客户的更改。这些分支将始终是分支,永远不会合并回主干/主分支。
我尝试实现的主要目标是,我可以轻松地将所有来自主干/主分支的更改合并到各个客户分支中,但我对是否需要合并或变基感到困惑。 所以我的问题是... 我应该总是使用变基吗?如果是这样,为什么?(因为我想在每个分支中保留单独的提交记录吗?) 编辑,所以我创建了一个存储库,在该存储库中我有一个名为file.php的文件,其中包含$x = 1
  • 我将其提交到主干
  • 我创建了一个名为client1的分支
  • client1中,我添加了一个新文件并提交
  • client1中,我更改了file.php,使$x = 2

git log pre merge

  • 主干中,我更改了file.php,但这是一行新内容,$x仍然是$x=1
  • client1中,我合并了master并在$x上得到冲突。

是因为我在与$x相邻的位置添加了新行,导致了冲突吗?

1个回答

2

你应该进行合并操作。重新设置基准将会获取自从分支和主分支分开以来主分支上的所有变更,并将它们重新创建在分支之上。这意味着每个主分支上的提交都会为你正在跟踪的每个客户端分支复制一遍。

语义上讲,你正在执行的是合并操作。合并后的提交图形看起来更加清晰,Git 在执行合并时也更容易,因为每次合并后,主分支的历史记录都将成为分支自己历史记录的一部分 -- Git 只需要考虑自上次合并以来主分支上的提交,而不是重新考虑每个主分支上的提交。


好的,我已经将我的主分支合并到我的分支中,但是我在一个文件上遇到了冲突,这个文件与我在创建该分支后提交到该分支的提交相对立。例如... file.php 在主分支中有 $x = 1;,我提交主分支,然后创建 client1 分支并切换到该分支,更改 file.php 使其为 $x = 2; 并提交,然后切换回主分支,在 file.php 中进行另一次更改,提交,切换回 client1 分支,将主分支合并到该分支中,并在 $x 行上发生冲突。它似乎正在使用来自主分支的旧版本覆盖最近在分支中进行的修订。这是正常的吗?还是我太蠢了? - Horse
1
@Horse,你在分支后更改了主分支中的$x行还是其附近的行?我没有看到Git覆盖任何内容,相反它告诉你两个分支都触及了文件的同一区域,并且不知道你想要哪一个分支。由你决定哪个更改属于客户端分支。 - cdhowie
不,主 $x 没有改变,我只是在分支中进行了更改,然后合并了,然后最初的预分支主提交与更近期的分支提交发生了冲突。 - Horse
@Horse提交的代码已经超过了两个分支的最近公共祖先(即“合并基础”),因此不会被考虑在内。这意味着“预先分支提交”的代码不可能干扰到合并操作。 - cdhowie
1
@Horse 你可以查看 git log --pretty=oneline --abbrev-commit --graph --decorate --all 的输出,确保提交图是你所期望的。 - cdhowie
已将一些信息添加到原帖中,并输出了日志。 - Horse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接