所以我觉得我想要做一件简单的事情。我有2个分支机构。在“主人”我想合并分支“功能”,但我不想从“功能”的最新更改。
目前
--M0--M1--M2
\
F0--F1--F2
想要:
--M0--M1--M2--M3
\ /
F0--F1--F2
抱歉,我不知道如何绘制它,但是我的主人(M2)应该将所有更改都提升到F1,基本上,它应该相当于:
--M0--M1--M2--M3
\
F1--F2
那么如何进行此合并以便主分支不会获取最新的F2提交?
编辑:有关此问题的背景信息。
我有一个主分支并启动了一个功能分支。然后我在应该在主分支中的功能分支中进行了更改(A)。然后我在功能分支(属于那里)进行了更改(B)。我希望更改(A)在master中,feature branch从那里进行分支,并将(B)更改为保留在feature分支中。
将来,功能分支可能会从主设备中获取更改。然后,当功能完成后,它将合并回主服务器,并且可以删除该分支。
答案 0 :(得分:1)
假设您有一个提交历史记录 - 就像您在示例中提供的那样 - 带有以下分支引用。
--M0--M1--M2 <- master
\
F0--F1--F2 <- feature
一些背景
在git中你不会合并分支而是提交。每个提交都有一个关于它的父提交的引用,这就是你的历史记录的构建方式。分支仅仅是特定提交的引用。
合并提交被定义为具有多个父提交的提交。
引用提交
这意味着您只需提供有关要合并的提交的引用。所以merge命令看起来像这样:
# Make sure you are on the master branch when executing the command
git merge <reference-on-F1>
有两种简单的方法可以引用提交。
您可以通过 SHA-1 哈希直接引用。此哈希在日志输出中以短格式打印。 (git merge abc123
)
您可以从另一个提交中进行相对引用,例如从分支引用中进行。存在两种主要语法来创建相对引用。 ^
和~
运算符。
虽然^
运算符直接指向下一个父级,但~
可以解决位于后面的父提交(而master~3
相当于master^^^
)。
在您的情况下,这将导致git merge feature^
。
如果您想了解更多关于git引用的信息,请查看gitpro书籍的Git Revision Selection chapter。
编辑正如Andrew正确地注意到我没有谈论&#34;论证&#34; ^
需要。我是故意离开的,因为这对问题来说并不重要。如果您仍感兴趣,可以在我提供的链接下找到所有内容。