【问题标题】:Git merging and commit issueGit合并和提交问题
【发布时间】:2014-04-22 07:32:48
【问题描述】:

我有 2 个分支 - 掌握和开发 当我在开发分支上时,我已经提交并推送了一个更改(添加到一个文件中)并且它是成功的。

然而,当我输入git checkout master,然后输入git merge develop...而不是得到输出消息(我正在从我之前的合并中复制这条消息),并做了一个git push:

Updating 325ac4a..51ffb06
Fast-forward
Test_Folder/Images/Img_01.jpg | Bin 0 -> 4224 bytes
2 files changed, 1 insertions(+)
create mode 100644 Test_Folder/Images/Img_01.jpg

我被要求在终端本身中添加提交消息... 这与我之前所做的所有合并非常不同,这是我第一次看到它。虽然我设法通过了commit,然后是git push,但我做错了吗?

即便如此,如果上面的“问题”看起来是正确的,有什么方法可以让我在不通过终端样式的情况下提交消息? (顺便说一句,我尝试使用git gui,但显然我没有看到任何文件或任何文件)

【问题讨论】:

    标签: git github git-merge git-commit


    【解决方案1】:

    看来您这次获得了真正的合并,而之前的快进合并。

    看看git docs 了解两者的区别。

    PS:进行真正的合并是完全正常的。然而,许多协作环境倾向于不允许它们,因为这些是实际上可能导致冲突的合并。快进合并永远不会冲突。但同样,两者都很正常。

    编辑:这是完成特定类型合并的情况:

    1) 快进合并:当您的master 是您尝试合并的分支的直接祖先时执行此操作。

    --*--*--*(master, HEAD)--*--*--*(dev)
    

    在这种情况下,执行合并意味着只需将 master 引用移动到 dev。最终结果如下所示:

    --*--*--*--*--*(master, dev, HEAD)
    

    2) 真正的合并:当master 不是您要合并的分支的直接祖先时会发生这种情况。

    --*--*--*--*(master, HEAD)
             \
               --*--*--*(dev)
    

    在这种情况下,master 已从创建 dev 分支的位置向前移动。因此,在合并期间,我们也必须在 master 上包含新提交的更改。因此 git 将尝试创建一个全新的提交,该提交继承自两个分支并将master 移动到它。

    -*--*--*--*---------*(master, HEAD)
            \          /
              --*--*--*(dev)
    

    将此与 ff merge 进行比较,您将了解它们为何如此命名。 HEAD 表示当前分支。

    我希望这次我解释得更清楚一点。

    【讨论】:

    • 感谢您回复我。就像想知道我如何或何时知道 Git 将执行真正的合并或快进合并?这似乎是我的一个随机的 Git 噱头......
    • @user3212246 每当您的开发分支和主分支并行发展时,总是需要真正的合并,因此总是会创建合并提交。
    • 谢谢大家.. 可能我首先弄清楚我的master 不是它的负责人... 现在在我看来,我几乎所有的合并都是一个快进合并...
    猜你喜欢
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2011-06-23
    • 2013-06-20
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多