【发布时间】:2013-07-18 08:15:18
【问题描述】:
我创建了分支 A 并创建了 B。现在,A 已被其他人更新,我想将这些提交带到我的 B 分支,这样我就可以确保我一直在那里所做的事情仍然适用于它新的A内容。
我该怎么做? Git 的术语(拉取、提取、合并等)非常不直观,至少在早期是这样的:(
【问题讨论】:
标签: git version-control
我创建了分支 A 并创建了 B。现在,A 已被其他人更新,我想将这些提交带到我的 B 分支,这样我就可以确保我一直在那里所做的事情仍然适用于它新的A内容。
我该怎么做? Git 的术语(拉取、提取、合并等)非常不直观,至少在早期是这样的:(
【问题讨论】:
标签: git version-control
我会建议(如果没有人从 B 中提取):
你所拥有的是一个分支A,它具有新的演变和可能在upstream repo中完成的提交:
a--a--a (origin/A)
/
a--a--a A
\
b--b--b (B, local branch)
首先确保A 与上游回购内容保持同步:origin/A:
git checkout A
git pull
这会给你:
a--a--a--a--a--a (A, origin/A)
\
b--b--b (B, local branch)
然后您将在 A 之上对 B 所做的本地修改进行重新定位(我想这里是 A has an upstream branch,意思是 it does track origin/A,您可以使用 git branch -avvv 检查)
git checkout B
git rebase A
这给了你:
a--a--a--a--a--a (A, origin/A)
\
b'--b'--b' (B, local branch)
请注意,这会更改 B 的历史记录,因此如果 B 已被推送,您将不得不 push --force origin B,如果其他人已经开始处理 B,这可能会很危险。
请参阅(有关变基技巧的更多信息):
git rebase and git push: non-fast forward, why use?”注意:“fork a branch”不是推荐的表达方式,因为 fork 更常用于指代服务器端的克隆 repo:请参阅“Git fork is git clone?”。
相反,您会说:“我分支了A 并创建了B”:操作是“分支”(不是“分叉”)。
【讨论】: