首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >合并,先将分支提交给主人

合并,先将分支提交给主人
EN

Stack Overflow用户
提问于 2017-11-28 15:59:41
回答 2查看 188关注 0票数 0

我有一个分支是最近提交给master的。这个分支有两个提交。我想将第一次提交合并到master上。

我知道我可以摘樱桃,但如果我能帮上忙的话,我真的不想把主人和树枝分开。

现状:

代码语言:javascript
代码运行次数:0
运行
复制
Branch:       +--->B--->C
             /
Master: --->A

樱桃-选择选项:

代码语言:javascript
代码运行次数:0
运行
复制
Branch:       +--->B--->C
             /
Master: --->A--->B'

理想选择:

代码语言:javascript
代码运行次数:0
运行
复制
Branch:            +--->C
                  /
Master: --->A--->B

这个是可能的吗?

请注意,提交已全部推送到远程;但目前没有其他人能够访问此特定的回购,因此push -f将是可以的。

我好像还记得,当一个分支被检查出来的时候,也许有什么方法可以合并到师父身上……如果这是真的,我可以简单地签出提交B,然后以这种方式合并吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-28 17:53:48

更具体地说,您可能希望:

代码语言:javascript
代码运行次数:0
运行
复制
git merge --ff-only <commit-specifier>

它告诉Git对当前分支执行快速转发,而不是真正的合并,不管这是什么,对指定的提交。这种行动:

  1. 测试HEAD是否是<commit-specifier>的祖先:如果不是,失败,如果是,继续到.
  2. 提前当前分支,以便它指向<commit-specifier>并读取提交到索引和工作树中的提交(git read-tree,“两树合并”案例--注意,如果您有未提交的更改或目标提交中的未跟踪文件,这也可能失败)。

现在,在某个目标提交的方向上“提前”找到一个特定的散列,即N提交,可能有点棘手。例如,考虑:

代码语言:javascript
代码运行次数:0
运行
复制
...--o--o   <-- master
         \
          \      C--D
           \    /    \
            A--B      G--H   <-- branch
                \    /
                 E--F

branch的tip提交是master-or提交之前的8次提交,是吗?我认为每个人都同意Amaster领先一次,B领先两次。但是CEDF呢?C领先三位,E也领先;DF都领先四位。但是G并没有比master领先5:它似乎比主人领先了7。同样,H aka branch似乎比master领先8位。

因此,如果我告诉您向前移动三次提交,您会选择提交C还是E?你会给我一个错误,或者一个选择吗?为什么?

如果将事物约束为线性链,则可以枚举masterbranch之间的提交(不包括master )和包含branch的提交,其中包括:

代码语言:javascript
代码运行次数:0
运行
复制
git rev-list --reverse master..branch

然后列表中的第N个提交是要给git merge --ff-only的提交哈希。但是,如果这两点之间存在分支和合并链,整个问题就变得棘手起来。

票数 1
EN

Stack Overflow用户

发布于 2017-11-28 17:05:00

正如雷蒙德·陈( Raymond )所言,上述问题的解决方案是git merge B

不过,如果有人对题为n提交而不是仅仅1的问题有一个更一般的答案,我将暂时搁置这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47535824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档