我有一个分支是最近提交给master
的。这个分支有两个提交。我想将第一次提交合并到master上。
我知道我可以摘樱桃,但如果我能帮上忙的话,我真的不想把主人和树枝分开。
现状:
Branch: +--->B--->C
/
Master: --->A
樱桃-选择选项:
Branch: +--->B--->C
/
Master: --->A--->B'
理想选择:
Branch: +--->C
/
Master: --->A--->B
这个是可能的吗?
请注意,提交已全部推送到远程;但目前没有其他人能够访问此特定的回购,因此push -f
将是可以的。
我好像还记得,当一个分支被检查出来的时候,也许有什么方法可以合并到师父身上……如果这是真的,我可以简单地签出提交B,然后以这种方式合并吗?
发布于 2017-11-28 09:53:48
更具体地说,您可能希望:
git merge --ff-only <commit-specifier>
它告诉Git对当前分支执行快速转发,而不是真正的合并,不管这是什么,对指定的提交。这种行动:
HEAD
是否是<commit-specifier>
的祖先:如果不是,失败,如果是,继续到.<commit-specifier>
并读取提交到索引和工作树中的提交(git read-tree
,“两树合并”案例--注意,如果您有未提交的更改或目标提交中的未跟踪文件,这也可能失败)。现在,在某个目标提交的方向上“提前”找到一个特定的散列,即N提交,可能有点棘手。例如,考虑:
...--o--o <-- master
\
\ C--D
\ / \
A--B G--H <-- branch
\ /
E--F
branch
的tip提交是master
-or提交之前的8次提交,是吗?我认为每个人都同意A
比master
领先一次,B
领先两次。但是C
和E
,D
和F
呢?C
领先三位,E
也领先;D
和F
都领先四位。但是G
并没有比master
领先5:它似乎比主人领先了7。同样,H
aka branch
似乎比master
领先8位。
因此,如果我告诉您向前移动三次提交,您会选择提交C
还是E
?你会给我一个错误,或者一个选择吗?为什么?
如果将事物约束为线性链,则可以枚举master
和branch
之间的提交(不包括master
)和包含branch
的提交,其中包括:
git rev-list --reverse master..branch
然后列表中的第N个提交是要给git merge --ff-only
的提交哈希。但是,如果这两点之间存在分支和合并链,整个问题就变得棘手起来。
发布于 2017-11-28 09:05:00
正如雷蒙德·陈( Raymond )所言,上述问题的解决方案是git merge B
。
不过,如果有人对题为n提交而不是仅仅1的问题有一个更一般的答案,我将暂时搁置这个问题。
https://stackoverflow.com/questions/47535824
复制相似问题