【问题标题】:git cherry-pick merge conflict pulling in other commits?git cherry-pick 合并冲突拉入其他提交?
【发布时间】:2012-03-11 07:19:38
【问题描述】:

由于某种原因,当苍蝇发生合并冲突时,看起来 git cherry-pick 会拉入其他提交。当我们使用 git mergetool 时,这些会消失,但会阻止我们手动编辑合并冲突的文件。

有人知道为什么会这样吗?

为了说明我的意思,让我们使用一个全新的 git 1.7.4 存储库,其中包含单个文件 foo

header

footer

现在让我们创建一个名为bar 的新分支。回到 master,让我们在单独的提交中添加三个更改到这个文件。

提交 1:

header

+add something
+
footer

提交 2:

header

add something

+add something else
+
footer

提交 3:

header

add something

add something else

+important change!
+
footer

由于最后一次提交很重要,因此我们决定将其拉回到该分支上的分支 bargit cherry-pick <commit>

不幸的是,这会在文件foo 中产生有趣的合并冲突:

header

<<<<<<< HEAD
=======
add something here

add something else here

important change!

>>>>>>> 356ca3c... important change
footer

请注意,git mergetool 似乎做了正确的事情并产生了这个:

header

+important change!
+
footer

为什么合并冲突的文件包含我们尝试挑选的提​​交之前的提交

【问题讨论】:

    标签: git cherry-pick merge-conflict-resolution


    【解决方案1】:

    Git 持怀疑态度,如果它没有找到适用于补丁的合适边缘,它不会进行合并。该补丁将应用于不存在的行号。检查该提交的补丁,并查看它是否应用在没有意义的行号处。由于它是精选的,因此它没有考虑文件是如何变成这样的,并且可以添加该条目。希望这是有道理的。

    【讨论】:

    • 你有这方面的支持参考吗?我的问题似乎类似于stackoverflow.com/q/7802252/7708 那里,您说cherry-pick“有效地为单个提交制作补丁”;这与我之前听到的关于樱桃采摘的说法是一致的。您上面的回答表明它比这更复杂。
    • 这并不复杂。 Git 查看补丁的应用位置,如果边缘不匹配,则认为是冲突。如果你合并,那么 git 会通过考虑历史来考虑文件是如何到达它们现在所处的状态的。
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2013-11-18
    • 2012-05-21
    • 2016-02-11
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多