为什么git rebase --onto不会移动任何提交?

时间:2016-04-16 19:16:58

标签: git version-control rebase

我的设置如下:

- A - B - C - ... - D - E <- copy-of-master
   \ 
     F - ... - G - H <- dev
                \ 
                 I - J <- bugfix

我想将提交I和J移到copy-of-master上,这只是upstream1/master的副本。

但是命令git rebase --onto copy-of-master dev bugfix什么都不做。当我打开拉取请求时,它表示bugfixupstream1/master相同。

此外,在运行rebase后,当我git checkout dev时它告诉我:

  

您的分支机构和&#39; upstream2 / dev&#39;有分歧,   并分别有1814和1799个不同的提交

这只是建议dev以某种方式移动到copy-of-master,因为upstream1/masterupstream2/dev大致相当于2000次提交。

2 个答案:

答案 0 :(得分:1)

  

我想将提交I和J移动到copy-of-master,这只是upstream1 / master的副本。

为什么不简单地使用git cherry-pick I J

git checkout copy-of-master
git cherry-pick I J

git cherry-pick <SHA-1> <SHA-1> <SHA-1> ...

  

在master分支的顶端应用commit提交的更改,并使用此更改创建一个新的提交。

您还可以指定樱桃选择

的范围
git cherry-pick <SHA-1>...<SHA-1>

enter image description here

答案 1 :(得分:1)

  

但是命令git rebase --onto copy-of-master dev bugfix什么都不做

预期:

copy-of-master dev bugfix上的git rebase将在dev之后移动所有提交,最多为bugfix

在你的图表中, devH)之后没有提交

- A - B - C - ... - D - E <- copy-of-master
   \ 
     F - ... - G - H <- dev
                \ 
                 I - J <- bugfix

G(即dev~1dev之前的一次提交)但是可以正常工作:所有提交 G之后提交到​​{{ {1}}代表bugfix提交。

bugfix

这可行,假设git rebase --onto copy-of-master dev~1 bugfix (或dev~1)是从G分叉bugfix分支的提交。