# 假设你的分支情况是这样 # A---B---C topic # / # D---E---F---G master # 想改成这样 # A---B---C topic # / # D---E---F---G master # 可以使用下面的命令,该命令的意思是: # 把从topic可达但从master不可达的提交(A,B,C)提取出来 # 然后以当前master为新的起始点将这些提交依次链接起来 git rebase master topic # 假设你的分支情况是这样 # o---o---o---o---o master # # o---o---o---o---o next # # o1---o2---o3 topic # 想改成这样 # o---o---o---o---o master # | # | o1---o2---o3 topic # # o---o---o---o---o next # 可以使用下面的命令,该命令的意思是: # 把从topic可达但从next不可达的提交(o1,o2,o3)提取出来 # 然后以当前master为新的起始点将这些提交依次链接起来 git rebase --onto master next topic
情景模拟:
先执行下面的命令,创建一个测试用的Git仓库:
# 创建一个空的Git仓库
mkdir repo
cd repo
git init
# master: D,E,F,G
for i in D E F G
do
touch $i
git add .
git commit -m $i
done
# topic: A,B,C
git checkout -b topic HEAD~2
for i in A B C
do
touch $i
git add .
git commit -m $i
done查看下当前的分支情况:
$ git -P log --graph --oneline --all * ebfa9da (HEAD -> topic) C * 86a2290 B * bbd227b A | * 501d278 (master) G | * fac2bda F |/ * 2eebb0e E * 0669225 D
由上可见,该分支情况和我们假设中的第一种情况完全一致。
现在我们想要将topic分支上的ABC提交重新rebase到最新的master分支上,可以执行如下命令:
$ git rebase master topic First, rewinding head to replay your work on top of it... Applying: A Applying: B Applying: C $ git -P log --graph --oneline --all # 查看当前的分支情况 * 27c0804 (HEAD -> topic) C * b2d89a9 B * ea4148d A * 501d278 (master) G * fac2bda F * 2eebb0e E * 0669225 D
由上可见,topic分支上的ABC提交已经rebase到最新的master分支上了。
假设中的第二种情况这里就不演示了,比较类似,有兴趣的同学可以自己动手试下。
其实git rebase命令还可以干很多事,比如合并提交、删除指定提交等等,非常推荐大家好好看看git自带的rebase文档 git help rebase。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



