git 仅将新分支中的更改应用到旧分支

eqqqjvef  于 2023-04-10  发布在  Git
关注(0)|答案(1)|浏览(124)

我有两个分支:feature1feature2基于develop分支。feature1基于较旧的提交,而feature2则是最近的。
我只想从feature2中获取不在feature1上开发的提交。
我按照answer中的建议尝试了git rebase --onto feature1 develop feature2,但是我看到来自develop的提交仍然被应用到feature1上。我在这里错过了什么?
更新:原来本地的develop分支并没有更新到远程的develop,而feature2是基于远程的develop上的一个更新的提交。这就是为什么来自远程的develop的提交被重新定基的原因。

ne5o7dgx

ne5o7dgx1#

正如knittl在注解中提到的,git rebase --onto A B C总是采用提交范围B..C(即^B C
这意味着它应该针对从D(排除)到f2 HEAD的提交(这些提交都不应该来自develop,可以从develop访问):

f2--f2 (feature2)
         /
--d--d--D--d (develop)
     \
      f1--f1 (feature1)

git rebase --onto feature1 develop feature2

--d--d--D--d (develop)
     \
      f1--f1 (feature1)
            \
             f2'--f2' (feature2)

feature1之前被合并到feature2中,但没有删除feature1分支。
所以:

f1--f1--f1--f1     (feature1)   
        /          \
       /        f2--f2--f2  (feature2)  
      /        /
--d--d--d--d--d             (develop)

然而,《执行局》补充说:
我的本地develop分支不是最新的,而其他分支是最新的。
这就是为什么远程开发人员的提交会被重新定基的原因
所以:

gi fetch
git switch feature1
git rebase --onto feature1 origin/develop feature2

相关问题