gpt4 book ai didi

git - cherry-pick 提交 - 是提交快照还是补丁?

转载 作者:太空狗 更新时间:2023-10-29 14:28:12 26 4
gpt4 key购买 nike

我有一个与挑选提交和冲突有关的问题。

“Pro Git”书 explains提交是一种快照,而不是补丁/差异。

但是挑选提交可能表现得像一个补丁。

下面的例子,简而言之:

  • 创建 3 次提交,每次编辑文件的第一行(和单行)
  • 将分支重置为第一次提交
  • test1 :尝试挑选第三次提交(冲突)
  • 测试 2:尝试挑选第二次提交(OK)

  • mkdir gitlearn
    cd gitlearn

    touch file
    git init
    Initialized empty Git repository in /root/gitlearn/.git/

    git add file

    #fill file by single 'A'
    echo A > file && cat file
    A

    git commit file -m A
    [master (root-commit) 9d5dd4d] A
    1 file changed, 1 insertion(+)
    create mode 100644 file

    #fill file by single 'B'
    echo B > file && cat file
    B

    git commit file -m B
    [master 28ad28f] B
    1 file changed, 1 insertion(+), 1 deletion(-)

    #fill file by single 'C'
    echo C > file && cat file
    C

    git commit file -m C
    [master c90c5c8] C
    1 file changed, 1 insertion(+), 1 deletion(-)

    git log --oneline
    c90c5c8 C
    28ad28f B
    9d5dd4d A

    测试 1
    #reset the branch to 9d5dd4d ('A' version)
    git reset --hard HEAD~2
    HEAD is now at 9d5dd4d A

    git log --oneline
    9d5dd4d A

    #cherry-pick 'C' version over 'A'
    git cherry-pick c90c5c8
    error: could not apply c90c5c8... C
    hint: after resolving the conflicts, mark the corrected paths
    hint: with 'git add <paths>' or 'git rm <paths>'
    hint: and commit the result with 'git commit'

    #the conflict:
    cat file
    <<<<<<< HEAD
    A
    =======
    C
    >>>>>>> c90c5c8... C

    测试 2
    #same for 'B' - succeeds
    git reset --hard HEAD
    HEAD is now at 9d5dd4d A

    git cherry-pick 28ad28f
    [master eb27a49] B
    1 file changed, 1 insertion(+), 1 deletion(-)

    请解释为什么测试 1 失败(如果提交是补丁,我可以想象答案是快照?)

    最佳答案

    Pro Git 书是正确的:提交是快照。

    不过你也是对的:git cherry-pick应用补丁。

    怎么会这样?答案是,当您挑选提交时,您还指定要考虑的父提交,使用 -m parent-number争论。然后cherry-pick 命令会针对该父级生成一个差异,以便现在可以应用生成的差异。

    如果您选择挑选非 merge 提交,则只有一个父级,因此您实际上不会通过 -m并且该命令使用(单个)父级来生成差异。但是提交本身仍然是一个快照,它是 cherry-pick查找 commit^1 差异的命令(第一个也是唯一的 parent )vs commit并适用。

    关于git - cherry-pick 提交 - 是提交快照还是补丁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760257/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com