我的 git 存储库中有 2 个分支:
capsule-os
* remotes/m/ics
capsule-os 是我对 remotes/m/ics 分支的本地更改的分支。我使用(并构建)了 capsule-os 分支,但是 remotes/m/ics 有时会更新,我想将此更改与我的本地分支同步(实际上,将我的更改添加到此远程分支)。我该怎么办?
我的 git 存储库中有 2 个分支:
capsule-os
* remotes/m/ics
capsule-os 是我对 remotes/m/ics 分支的本地更改的分支。我使用(并构建)了 capsule-os 分支,但是 remotes/m/ics 有时会更新,我想将此更改与我的本地分支同步(实际上,将我的更改添加到此远程分支)。我该怎么办?
Amber 的答案是正确的,但我认为使用变基而不是合并的替代方法可能值得添加答案。
如果您还没有发布您的capsule-os
分支,您可能希望将您的更改“重新定位”到更新的m/ics
分支,例如:
# Make sure you're on the right branch:
git checkout capsule-os
# "Replay" all of your commits on top of m/ics, and update
# capsule-os to point to the result:
git rebase m/ics
(你可能需要解决一些冲突——如果你不能轻易做到这一点,你可以把你的capsule-os
分支恢复到原来的样子git rebase --abort
。)
作为替代方案,您可以ics
一次性获取新版本的分支并重新基于该分支:
git pull --rebase m ics
有许多不同的使用方式git rebase
,但它们本质上都涉及进行一组提交,并且对于其中的每一个,都尝试将提交引入的更改重新应用到其他提交上。这经常用于将一组提交“移动”到更新的上游分支,以保持历史简单。
我用“如果你还没有发布capsule-os
分支”来限定它的原因是重写一个分支的历史可能会给正在处理该分支的原始版本的合作者带来困难。但是,如果它仍然是私人工作,那么变基是使您的分支与上游保持同步的好方法,并且仍然保持历史简单。