git - 使用 GIT,我如何有选择地将一个提交的更改 merge 到另一个 'fork' 上?

标签 git merge pull

以这个场景为例:

  1. 我决定在 github.com 上“ fork ”一个代码库,并开始执行我的例程:编辑 - 提交 - 推送;又名 hack hack hack。
  2. 在我做了一些修改后,我看到另一个人对同一个项目做了一些修改,我喜欢他们!
  3. 我决定将它们 merge 到我的中。问题是,在他所做的几次提交中,我只想要一个特定提交的“一部分”。

将这些选定数量的更改 merge 到我的“分支”中的最有效方法是什么?

最佳答案

在 IRC 世界的浪潮之后,有人给出了一个很好的解决方案:

git cherry-pick SHA1 --no-commit
git add --patch

希望这对遇到同样问题的其他人有所帮助!

编辑:好的,也许不是那么简单。以下是完整步骤:

  1. 首先,您必须进入您的存储库,执行必要的 cd 操作以进入您的工作目录。

  2. 您现在需要添加远程分支,然后获取它。这样做:

    git remote add someUser git://github.com/someUser/someRepo.git

    git fetch someUser

  3. 您现在可以运行诸如 git log someUser/master 之类的命令来查找要“部分” merge 的提交 SHA1。

  4. 获得 SHA 后,您现在可以运行:

    git cherry-pick -n SHA1

    SHA1 是提交 SHA,呃!

  5. 很可能会发生冲突,这取决于提交的时间以及项目特定区域更改的频率。抱歉,您必须通过可信赖的编辑器手动解决这些问题。因此,取出 VIM 或您使用的任何其他工具,解决冲突,直到达到您喜欢更改的阶段。

  6. 您现在必须将索引重置为 HEAD 版本,然后您可以使用可信赖的 GIT add --patch 命令来选择您想要的更改:

    git 重置 HEAD

    git add --patchgit add -p

  7. 耶!提交时间:

    git commit -m "我 merge 了选定数量的更改"

  8. 要清理困惑(您在 git add --patch 中拒绝的内容)并仅保留工作存储库中的选定更改,请运行:

    git reset --hard HEAD

    显然 git checkout -f 也是另一种选择。

关于git - 使用 GIT,我如何有选择地将一个提交的更改 merge 到另一个 'fork' 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1405030/

相关文章:

git - 如何将 Gerrit 分支 merge 到另一个 Gerrit 分支

GitOps - 在同一个仓库或单独的仓库中配置?

git - 如何撤消 git pull?

Github 远程分支和本地 Git 存储库

java - 使用 Java 提取 xml 值

java - 从 git 到 eclipse 的特殊字符

git - 删除所有 Git 提交历史

r - 合并数据帧,同时对 R 中的公共(public)列求和

java - 合并两个 Guava 多重贴图

python - 合并排序中的比较计数