【问题标题】:Merge specific change in a commit from another branch合并来自另一个分支的提交中的特定更改
【发布时间】:2018-11-18 10:19:44
【问题描述】:

我想使用git 将开发分支提交中的更改合并到另一个分支。我试过git cherry-pick,但它会导致整个文件发生变化,而不是具体的变化。有人可以帮忙吗?

【问题讨论】:

  • 老实说,我这样做的方式是将您的源文件与 IDE(例如 IntelliJ)中的其他提交进行比较,然后拉入您想要的任何更改。
  • 这里已经回答了这个问题:stackoverflow.com/questions/1085162/…
  • 除了@TawandaDiza 提出的替代问题没有解决如何通过合并从另一个分支进行更改。 (事实上​​,这个问题可能根本不适用,因为该问题没有指定所需的更改是否在包含其他更改的文件中。)我不确定为什么人们在理解 EXACT 的含义时遇到这么多麻烦复制。

标签: git merge commit tortoisegit cherry-pick


【解决方案1】:

要记住的一件事是,提交是在决定什么“已经合并”时考虑的最小单位。所以有一个权衡,如果你不创建一个合并关系,你很可能会得到一个虚假的合并冲突,但是如果你确实在分支之间创建一个合并关系只是为了一个更改,它可能会导致某些未来的合并无法获取其他更改。

在 99% 的情况下,不创建合并关系在这里的危害较小,所以我想说你在 cherry-pick 的正确轨道上。

下一步是获得你想要的改变。最简单的方法是使用--no-commit(或-n)选项:

git cherry-pick -n <commit-id>

然后来自目标提交的更改将被暂存,但不会提交。您可以删除对其他文件的更改

git reset HEAD -- path/to/other/file
git checkout -- path/to/other/file

如果您想要的更改与其他更改在同一个文件中,您可以取消暂存文件,然后以“交互”模式重新暂存它

git reset HEAD -- path/to/file
git add -i path/to/file

(有关“交互式添加”界面的详细信息,请参阅https://git-scm.com/docs/git-add。它有多种方法可以选择要包含的更改。

完成选择性暂存后,您可以提交,然后从工作树中清除任何剩余的不需要的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 2013-06-28
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2011-10-30
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多