我已经从主人那里剪了一个分支X,然后我做了某些提交说,
C1, C2, C3, C4, C5, C6
现在我想将X与master分支合并到提交C2,我想将提交C3和C6移动到我从X剪切的不同分支Y.所以我想要的,如下所示:
master
\
\
X-C1-C2-C3-C4-C5-C6
最后它应该是这样的:
master------master
\ /
\ /
X-C1-C2
\
Y-C3-C4-C5-C6
答案 0 :(得分:2)
给出的答案要么很短,要么不能满足你的要求,所以我会提供另一个答案。
让我先解释一下git中的分支仅仅是对提交的引用;它们实际上是一个包含其提交哈希值的文件。因此,使用分支时几乎没有开销。
虽然您可以创建另一个分支Y
,但这不是必需的。最简单的方法是从C2
提交到master
的简单合并。
git checkout master
git merge <hash-of-c2>
但请注意,这可能会导致fast-forward
合并。如果master
上没有进一步的提交,那么就会发生这种情况,因此git只是将master
移动到C2
,如果你想强制合并提交并避免使用fast-forward
你可以使用合并时--no-ff
选项。
git merge --no-ff <hash-of-c2>
完成此操作后,您的提交图应与以下内容类似:
* (master) Merge commit
|\
| | * (X) C6
| | * C5
| | * C4
| | * C3
| |/
| * C2
| * C1
|/
* master commit
(master)和(X)是分支的当前提交。
显然,您可以按照建议创建多个分支。最简单的方法如下。
git branch Y X # Create Y branch which points at the same commit as X
git branch -f X <hash-of-c2> # Move X to point at C2
如果还有其他问题,请不要犹豫。
答案 1 :(得分:0)
您可以从X创建新的分支Y. reset
X回到指定的提交(C2)。然后merge
X进入主人。
答案 2 :(得分:0)
这是完成您之后的最明确的方式:
git branch Y X
git checkout C2 # where "C2" is the commit hash of C2 commit - now Tip of X is at C2
git branch -f X # force repointing of X in .git/refs/heads/X
git checkout master
git merge X
回复@cabellicar123的回答:
我更喜欢结账重置。重置将移动HEAD,将您从Y
分支中分离出来,并且(实际上,它们总是在reflog中)消除您的C3-C6提交。