gpt4 book ai didi

git cherry-pick 不只是选择提交的差异

转载 作者:IT王子 更新时间:2023-10-29 01:04:21 34 4
gpt4 key购买 nike

我有两个分支:AB .

  • A的提交历史:a <- b <- c ;
  • B的提交历史:a <- h <- i ;

假设这里只有一个文件。

  1. 提交 b ,我添加了一些文本,例如“foo”。
  2. 提交 c ,我添加了一些文本,例如“bar”。
  3. 然后我git cherry-pick cB分支。我以为cherry-pick只会选择 c 中的更改去分行B .但是,它会同时添加 foobar去分行B .这显然不是我想要的。

因此,cherry-pick将选择提交中涉及的那些文件的所有更改 c自祖先提交以来 a .那正确吗?如果我只想从 b 中选择差异怎么办?至 c并将其应用于 i

更新具体步骤

  1. 初始化一个 git 仓库;
  2. 添加文件 test.txt并发出第一个提交 init commit . test.txt现在是:

    first line  
    second line
  3. 创建一个新分支dev但留在分支master ;

  4. 添加added in commit b到文件并发出提交 b . test.txt现在是:

    first line
    added in commit b
    second line
  5. 添加added in commit c到文件并发出提交 c . test.txt现在是:

    first line
    added in commit b
    added in commit c
    second line
  6. checkout dev分支并提交提交 h . test.txt现在是:

    first line
    second line

    adding by commit h
  7. git cherry-pick <commit c SHA1 ID>挑选提交 c提交 h .

  8. 冲突信息:

    index 6a8dc57,594c6ec..0000000
    @@@ -1,4 -1,4 +1,9 @@@
    first line
    ++<<<<<<< HEAD
    ++=======
    + added in commit b
    + added in commit c
    ++>>>>>>> 06ce9b1... commit c adding another line
    second line
    +
    +adding by commit h
  9. 看到了吗? cherry-pick还带来了提交中的更改 b .

谢谢!

最佳答案

git cherry-pick 尝试只提交一次。但它通过应用需要一些上下文的补丁来做到这一点。提交 C 中所做的更改与提交 b 中所做的更改非常接近,因此您会遇到冲突 - 它不能只找到必须应用更改的正确位置。当你有冲突时,你也会得到一些冲突的上下文,这至少是你的提交 B 的一部分。

如果没有冲突,它是这样工作的:

$ git init
$ cat > f
line1
line2
line3
$ git add f
$ git commit -a -m "initial"
# Edited to add a line in the beginning of f
$ cat f
Commit b
line1
line2
line3
$ git commit f -m "B"
# Edited to add a line in the end of f
$ cat f
Commit b
line1
line2
line3
Commit c
$ git commit f -m "C"
$ git checkout HEAD^^
$ git cherry-pick master
$ cat f
line1
line2
line3
Commit c

关于git cherry-pick 不只是选择提交的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42571654/

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