【问题标题】:To "pull" or "push" diverged branches after a rebase?在变基后“拉”或“推”分歧的分支?
【发布时间】:2020-10-02 11:16:09
【问题描述】:

我有一个过时但干净的 test 分支,我针对 master 进行了重新定位。在解决了一些冲突之后,我成功地完成了一个 rebase 过程。但是,git status 现在告诉我分支 testorigin/test 已经分歧,and have 37 and 15 different commits each, respectively. 我想在 rebase 过程之后同步分支,所以我打算做一个 push,但现在不确定了,我不明白“37 和 15 个不同的提交”背后的逻辑。

下一步应该是什么,pullpush

【问题讨论】:

  • Rebase copies 旧的提交到新的和(可能希望)改进的 replacement 提交。不同的提交是旧的和新的。如果您运行git pull,您是在告诉 Git 获取旧的提交,然后将它们与新的替换merge,给您两全其美,所以您绝对不要 想要这样做。

标签: git git-branch git-rebase


【解决方案1】:

你想强制推送你的test 分支。

在rebase之前,你有这种情况:

--o-- 21 more commits --o     master
   \
    o-- 13 more commits --o   test and origin/test

在你变基之后,你有这种情况:

--o-- 21 more commits --o                          master
   \                     \
    \                     o-- 13 more commits --o  test
     \
      o-- 13 more commits --o                      origin/test

也就是说,您留下了 origin/test,因为您在 master 之上构建了自己的分支。 master 有 22 个提交,而您在顶部构建了 15 个提交,即 37 个提交。 origin/test 仍然是 15 次提交。这就是git status 报告“37 和 15 个不同的提交”的原因。

此时,您很可能希望发布您的 test 分支,即将它推送到您的远程存储库。您必须强制推送,因为新头 (test) 不再是 origin/test 的后代。

【讨论】:

  • 我应该进行合并而不是变基吗?我想避免强制推动。总的来说,正确的工作流程是什么?
  • 如果您无法承受强制推送,您应该将test 重置为origin/test 并进行合并。
  • “正确的工作流程”在旁观者的眼中。 使用最适合您的方式。 更喜欢主题分支和合并,但由此产生的历史在外人看来可能是一团糟(有时对我自己也是如此)。我可以理解其他人更喜欢线性历史并经常重新调整他们的分支。
  • 变基总是会导致force push,换句话说,我做的一切都正确吗?
  • 是的,在变基之后,您总是必须强制推送生成的分支。你做的一切都是正确的(如果我对你的分支状态的假设是正确的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 2013-03-27
  • 2019-08-23
  • 2012-02-14
相关资源
最近更新 更多