从主分支更新功能分支 - x 个提交领先?

3

声明:我显然对Git还缺乏经验。感谢您的帮助和耐心。

有时,在“特性”分支中工作一段时间后,我会想从主分支中拉取新更改。假设特性分支在主分支之后有x个提交。当我更新特性分支时,我使用的git工具(例如SourceTree、GitHub(推送时)等)报告说我刚刚在我的特性分支上创建了x个新的提交。

最终,历史记录只显示一个合并提交。但是,由于这些“x”提交导致一些奇怪的事情发生。例如,当我推送分支时,会向我们的Slack频道发布一条消息(通过GitHub生成),声称我刚刚添加了y个提交(其中y=x+[特性分支中存在的新的非合并相关提交数])

例如,我刚刚将主分支合并到我的特性分支中,SourceTree现在显示我有97个提交可以推送。(合并之前,SourceTree只显示我有2个未推送的提交):

enter image description here

这是正常的吗?Git/SourceTree是否有效地只是“引用”原始提交,而不是在全新的提交中复制相关的代码更改?

所有这些都不是很重要,但有点误导和令人困惑。我做错了什么吗?

2个回答

2

与其将主分支合并到你的功能分支中,你应该将你的功能分支基于主分支进行变基。这假设你还没有推送你的更改。

git fetch <remote>
git checkout <feature>
git rebase <remote>/master

这将确保你只推送你自己的提交。

就像你所暗示的那样 - 如果我已经推送到GitHub,情况可能会有所不同。我所读的所有内容似乎都可以总结为:“如果您尚未将任何内容推送到公共存储库,请执行变基。如果您已经推送,请执行合并。”您有什么想法,如果我已经推送了怎么办? - rinogo
1
@rinogo 这不是绝对的规则,只是一个建议。原因是如果其他人获取了您的提交,他/她将需要使用-f(强制)选项获取您的新更改。这个问题可以通过告知他们强制获取来解决。更糟糕的是,如果有人开始基于您的更改工作。在这种情况下,他/她将拥有基本上是重复的提交,但Git并不知道。您可以使用git rebase --onto <your-new-commit> <last-unneeded-commit>来解决这个问题,但是这可能会变得非常混乱,涉及大量的提交者。 - Joseph K. Strauss

-1

以防其他人在未来有同样的问题,以下是一种可能的方法。

  1. 从主分支创建一个新分支。这个新分支将包含主分支中最新文件的副本。
  2. 将新分支合并到目标分支。
  3. 继续在目标分支上工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接