在以下设置中,我有两个分支B1和B2
[B1]
-o-o-d1-d2-d3
\
c1-c2-c3
[B2]
我想将提交c1切换到B1,以实现以下设置
-o-o-d1-c1-d2-d3
\
c2-c3
我知道我可以将c1挑选到第一个分支上。但是,如果仅在分支B1上更改了c1,则我的历史记录就更清晰了。 (我承认,这个问题可以看作是一个美学问题,但是我希望git有一个不错的解决方案。)
这是一种没有太多麻烦的实现方式
初始情况
-o-o-d1-d2-d3 <<< B1
\
c1-c2-c3 <<< B2
首先将一个临时分支指向c1
git checkout -b B3 c1
[Phase 2
-o-o-d1-d2-d3 <<< B1
\
c1 <<< B3
\
c2-c3 <<< B2
然后恢复d2
和d3
git cherry-pick d2 d3
第三阶段
-o-o-d1-d2-d3 <<< B1
\
c1-d2'-d3' <<< B3
\
c2-c3 <<< B2
并且您最终将不得不移动B1
指向我们的新构造(B3
)
git checkout -B B1 B3
# and destroy the temp branch
git branch -d B3
(当然,这是B1
的回避历史。)