问题描述
我对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
-
通过运行拉命令:
从远程分支 branch1 获取代码git pull origin 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
当提交D
,E
和F
删除一些文件并添加其他文件时,这些删除和添加将反映在分支mergebranch
的最终状态中,不管操作是快进还是真正的合并,因为使用命令
git merge update
您说:“我希望在分支updated
从当前分支(C
)分叉到分支updated
(F
)的尖端整合之间进行所有更改进入当前分支。”
多亏了大家的评论,问题解决了。
所以我所缺少的是合并基础。我从头开始使用系统的原始版本,然后从那里创建了两个新分支,一个分支用于自定义旧版本,一个分支用于更新。从那里开始,合并过程按照我的预期进行。