以这个场景为例:
- 我决定在 github.com 上“ fork ”一个代码库,并开始执行我的例程:编辑 - 提交 - 推送;又名 hack hack hack。
- 在我做了一些修改后,我看到另一个人对同一个项目做了一些修改,我喜欢他们!
- 我决定将它们 merge 到我的中。问题是,在他所做的几次提交中,我只想要一个特定提交的“一部分”。
将这些选定数量的更改 merge 到我的“分支”中的最有效方法是什么?
最佳答案
在 IRC 世界的浪潮之后,有人给出了一个很好的解决方案:
git cherry-pick SHA1 --no-commit
git add --patch
希望这对遇到同样问题的其他人有所帮助!
编辑:好的,也许不是那么简单。以下是完整步骤:
首先,您必须进入您的存储库,执行必要的
cd
操作以进入您的工作目录。您现在需要添加远程分支,然后获取它。这样做:
git remote add someUser git://github.com/someUser/someRepo.git
git fetch someUser
您现在可以运行诸如
git log someUser/master
之类的命令来查找要“部分” merge 的提交 SHA1。获得 SHA 后,您现在可以运行:
git cherry-pick -n SHA1
SHA1
是提交 SHA,呃!很可能会发生冲突,这取决于提交的时间以及项目特定区域更改的频率。抱歉,您必须通过可信赖的编辑器手动解决这些问题。因此,取出 VIM 或您使用的任何其他工具,解决冲突,直到达到您喜欢更改的阶段。
您现在必须将索引重置为 HEAD 版本,然后您可以使用可信赖的 GIT
add --patch
命令来选择您想要的更改:git 重置 HEAD
git add --patch
或git add -p
耶!提交时间:
git commit -m "我 merge 了选定数量的更改"
要清理困惑(您在
git add --patch
中拒绝的内容)并仅保留工作存储库中的选定更改,请运行:git reset --hard HEAD
显然
git checkout -f
也是另一种选择。
关于git - 使用 GIT,我如何有选择地将一个提交的更改 merge 到另一个 'fork' 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1405030/