我有一个分支机构,来自master
的最新提交。该分支上有两个提交。我想快速向前合并那些提交的第一个。
我知道我可以做一个樱桃的挑选,但是如果我能帮助它,我真的不想分歧大师和分支。
当前状态:
Branch: +--->B--->C
/
Master: --->A
樱桃挑选选项:
Branch: +--->B--->C
/
Master: --->A--->B'
理想的选择:
Branch: +--->C
/
Master: --->A--->B
这是可能的吗?
请注意,提交都已被推到遥控器;但是目前没有其他人可以访问此特定的存储库,因此push -f
可以。
我似乎还记得在签到一个分支时可能会有某种方法可以合并到主人...如果是真的,我可以简单地检查提交B,然后以这种方式合并?
更具体地说,您可能想要:
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
的提示提交是master
的提示提交之前的八个提交 - 还是?我认为每个人都同意A
是master
之前的一个提交,而B
领先两个。但是C
和E
以及D
和F
呢?C
领先三个,但E
也是如此。D
和F
都领先四个。但是G
比master
领先五:它似乎是 7 领先主人。同样,H
又名branch
似乎比master
领先八个。
所以,如果我告诉您要提前三提示,您会选择C
或E
提交吗?您会给我一个错误还是选择?为什么?
如果您将事物限制为线性链,我们可以列举" master
和branch
之间的提交",不包括master
,包括branch
,with:
git rev-list --reverse master..branch
,然后 n -th列表中的commit是给 git merge --ff-only
的提示。但是,如果在"这两个点之间"之间有分支机构链,那么整个问题就变得棘手了。
正如雷蒙德·陈(Raymond Chen)评论的那样,对的问题的解决方案是 git merge B
。
我会把问题打开一段时间,尽管如果有人对这个问题的答案更为一般,则标题为,即n提议,而不是1。