Git合并会覆盖分支吗?

问题描述

我对git还是很陌生,我无法按照我想要的方式合并它。所以这就是我要完成的事情:

我需要更新我们的学习管理系统。 我正在研究2个分支:mergebranch和update。在mergebranch上,我具有较旧的系统版本,该版本具有一些自定义更改和不在更新中的文件,但我也需要使它们也处于更新的版本中。然后在更新分支上,我有了新版本中的新鲜文件

我尝试了git merge update,这导致git删除了处于合并分支但未处于更新状态的自定义文件。而且,没有合并冲突,我发现这真的很奇怪。我查看了版本文本文件,该文件的第一行中只有版本号。我预计会发生冲突,但是git只是用新版本覆盖了旧版本号。好像git只是在旧版本上复制了新版本,并且没有合并发生。另外,我还会收到这些我不理解的“删除模式”和“创建模式”消息。

这就是我在git中所做的:

  • 文件从服务器克隆到本地目录

git checkout -b update

git add .
git commit -m "Update vanilla version"
git checkout master
git checkout -b mergebranch
git merge update

有人可以帮我吗?我迷路了。

解决方法

2020-08-23 14:02:04.486055707 +0000 UTC 上,我具有旧版本的系统,该系统具有一些自定义更改和文件,这些更改和文件不在mergebranch中,但我需要它们在update版本中也是

在Git中,您总是将分支合并到当前已签出的分支中。因此,如果您想将updated中的更改引入mergedbranch,则必须将updated合并到mergebranch中,方法是:

update
,

将从分支 branch1 到另一个 branch2 的代码:

  • 结帐至 branch2 git checkout branch2

  • 通过运行拉命令:git pull origin branch1

    从远程分支 branch1 获取代码

更新

git fetch origin
git checkout origin/mergebranch

5-2)合并此分支:

git merge --no-ff update

解决冲突并更正错误(如果存在),然后将完美的版本推送到您的分支ex:mergebranch

您可以将此新版本推送到主版本或合并分支中

git push origin mergebranch

如果您与显示的头条消息分离,则请执行以下操作:

git push origin HEAD:mergebranch
,

根据您的描述,我认为您具有以下历史记录(时间从左到右):

          D--E--F   <-- update
         /
--A--B--C           <-- mergebranch

发出合并命令时,mergebranch指向提交C。这就是所谓的快进情况。不需要实际的合并。 Git仅指向mergebranch提交F,使其等于分支update

          D--E--F   <-- update,mergebranch
         /
--A--B--C

如果两个分支确实像这样分叉,则需要进行实际的合并操作:

          D--E--F   <-- update
         /
--A--B--C
         \
          X--Y      <-- mergebranch

在这种情况下,将创建合并提交:

          D--E--F   <-- update
         /       \
--A--B--C         M <-- mergebranch
         \       /
          X-----Y

当提交DEF删除一些文件并添加其他文件时,这些删除和添加将反映在分支mergebranch的最终状态中,不管操作是快进还是真正的合并,因为使用命令

git merge update

您说:“我希望在分支updated从当前分支(C)分叉到分支updatedF)的尖端整合之间进行所有更改进入当前分支。”

,

多亏了大家的评论,问题解决了。

所以我所缺少的是合并基础。我从头开始使用系统的原始版本,然后从那里创建了两个新分支,一个分支用于自定义旧版本,一个分支用于更新。从那里开始,合并过程按照我的预期进行。