【问题标题】:Issue after master rebase on a branch that was already branched在已经分支的分支上主变基后的问题
【发布时间】:2018-08-22 09:31:45
【问题描述】:

按顺序:

  • 我从 master 创建了 B1 并做了一些事情。
  • 然后我打开了一个拉取请求并从 B1 创建了 B2 并做了一些事情。
  • 拉取请求已验证,因此我在 B1 上重新设置 master 并将 B1 合并到 master。
  • 然后我回到没有变基结果的 B2。即使我在 B2 上 rebase master,B1 提交仍然在这里,重复。

或者

 - git checkout master
 - git pull
 - git checkout -b 'b1'
 - git commit...
 - git push
 - git checkout -b 'b2'
 - git commit...
 - git checkout b1
 - git rebase -i master
 - (Pull request and merge on gitlab)
 - git checkout b2
 - git rebase -i master

结果:

* (HEAD->B2 + origin/B2)
* b2 commit
* b2 commit
* 1bis b1 commit
* 2bis b1 commit
* * (origin/HEAD origin/master) - Merge B1 into master
| |\
|/ /
| * 1 b1 commit
| * 2 b1 commit
|/
*
|

如何将 B2 分支更改/移动到主 Head 并删除重复提交?

【问题讨论】:

    标签: angular git merge gitlab rebase


    【解决方案1】:

    你不应该在任何东西上重新定位 master(除了 origin/master,它应该只是一个快进合并),你应该在 master 上重新定位功能分支。

    由于b2 基于b1,您需要将b1 重新设置为master,然后将b2 重新设置为b1

    • git checkout b1
    • get rebase -i master
    • git checkout b2
    • git rebase -i b1
    • 删除 b2 中的重复提交

    【讨论】:

    • 啊,那你的词序很混乱。您将 B1 重新设置为 master,而不是 B1 上的 master。您仍然应该能够在交互式变基上删除提交
    • @An-droid 根据您的编辑,您需要在 b1 上重新设置 b2。 git checkout b2 && git rebase -i b1。在 b1 合并到 master 之后,然后在 master 上 rebase b2。
    【解决方案2】:

    这里不适用将 master 分支重新定位到 B2 分支。我建议您只需 cherry-pick 您从 B2 分支到主分支的更改

    1. 您需要撤消对 B2 分支所做的一切。
    2. 将 master 恢复为将 B1 与 master 合并的状态

    然后

    git checkout master

    git cherry-pick {commin-hash(s) of new changes from B2 branch}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 2017-03-28
      • 1970-01-01
      • 2022-07-09
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多