【问题标题】:Update a fork with new commits on its master branch?用主分支上的新提交更新一个分支?
【发布时间】:2013-07-18 08:15:18
【问题描述】:

我创建了分支 A 并创建了 B。现在,A 已被其他人更新,我想将这些提交带到我的 B 分支,这样我就可以确保我一直在那里所做的事情仍然适用于它新的A内容。

我该怎么做? Git 的术语(拉取、提取、合并等)非常不直观,至少在早期是这样的:(

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    我会建议(如果没有人从 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,这可能会很危险。
    请参阅(有关变基技巧的更多信息):


    注意:“fork a branch”不是推荐的表达方式,因为 fork 更常用于指代服务器端的克隆 repo:请参阅“Git fork is git clone?”。

    相反,您会说:“我分支了A 并创建了B”:操作是“分支”(不是“分叉”)。

    【讨论】:

    • 不会变基修改 A 吗?
    • @lukech rebase 不会修改 A,它将在 A 之上重新创建 B。
    • @lukech 我添加了一些模式来更好地解释变基操作的性质。
    • @lukech 注意,创建新分支时避免使用“fork”一词;它简称为“分支”。为服务器端的克隆 repo 保留一个 fork:stackoverflow.com/a/6286877/6309
    • 看到我所说的术语令人困惑吗? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2014-03-26
    • 2015-07-24
    • 1970-01-01
    • 2015-11-07
    • 2022-06-13
    相关资源
    最近更新 更多