在我工作的大学,我们使用开源学习管理系统 (Moodle)。随着时间的推移,我们直接编辑源代码来修复我们发现的错误并提供自定义功能。我希望能够通过 Git 存储库跟上错误修复,同时跟踪我们的更改并确保我们的编辑得到保留。
我是一个相对的 Git 新手,但据我所知,这是我们目前的情况。
--C----C----C----C----C < custom
/
---B-----F-----F-----F-----F-----F-----F--... < origin
B = the build we installed
C = our changes
F = bug fixes
简而言之,我的问题是如何将 C 和 F 结合在一起。合并?变基?我应该将哪棵树合并/变基到另一棵树中?
答案1
合并和变基基本上是相同的:使最后一次提交合并两个分支的更改。但它们执行的方式不同。
合并会创建一个具有两个指定为父级的提交,并且重新定基会“移动”您的树,因此它的第一次提交基于(即有一个父级)其他分支(在您的情况下为原点)的最后一次提交。得到的树状态相同。
在这种情况下正确的做法是合并custom
分支origin
:
git checkout custom
git merge origin
仅当您想将一堆补丁发送给项目维护者时,重新定基才有用,这样他就不需要手动使它们适应最新的更改。
重新定基的命令如下:
git checkout custom
git rebase origin
另外,还有一个 git-cherry-pick(1) 命令,可用于将任意分支中的任意提交应用为补丁。