我一直在试图找出如何解决几个月来一直遇到的问题,并想确认在 github 上的项目中处理多个功能的正确步骤是什么。 我一直遵循的步骤是
我一直遇到的问题是,如果我一天内处理 5 个功能,并在有人能够查看更改并将它们合并到远程主分支之前为所有这些功能制作 PR,则每个 PR 都包含所有提交和文件更改所有先前的 PR,而不是仅显示我在该功能中实际处理的文件。 我什至尝试在本地删除项目并重新开始一个新的克隆,除了这次我将本地功能分支合并到本地主分支,然后将本地主分支推送到新的远程功能分支,并且同样的问题继续发生。
我已作为贡献者添加到该项目,有权将代码直接推送到他们的存储库,而不是先分叉它,然后从我的分叉副本中制作 PR。 即使他们接受我的更改并将其合并到远程主分支中,并且我继续研究其他功能,迄今为止我在所有 PR 中所做的所有提交仍然以某种方式包含在我的新 PR 中。 由于我进行原子提交,它可以快速添加超过 100 个更改,他们必须对这些更改进行排序才能找到我所做的最新更改。 他们说任何其他贡献者都没有发生过这种情况,如果他们更改一个 PR 中的 3 个文件,然后更改另一个 PR 中的 2 个文件,他们只能看到第一个 PR 中的 3 个文件和第二个 PR 中的 2 个文件。 有人可以帮助我理解我做错了什么或者我的过程中是否缺少一个步骤?
问题的出现是因为每个新功能分支都是从本地主分支创建的,而远程主分支可能不是最新的。如果您将更改合并或推送到本地主分支,但远程主分支尚未合并这些更改,则所有这些更改都将延续到后续功能分支和 PR 中。
多功能分支的最佳实践 这是一个更正的工作流程,以确保 PR 中的功能隔离:
定期更新您当地的主要分支机构 在创建新的功能分支之前,请确保您的本地主分支与远程主分支是最新的。
git checkout 主要 git pull origin main
这可确保您正在使用该项目的最新版本。
直接从更新的主干创建功能分支 根据更新的主分支创建新的功能分支:
git checkout -b 功能/我的新功能
这确保新分支从头开始。
致力于你的功能 进行原子提交并将功能分支推送到远程:
git 添加 . git commit -m“添加功能详细信息” git push origin 功能/我的新功能
为您的功能分支打开 PR 转到存储库并创建针对主分支的拉取请求。
完成功能后切换回主界面 完成功能分支上的工作并创建 PR 后,切换回主分支:
git checkout 主要
在开始下一个功能之前再次更新本地 main 在开始开发下一个功能之前,请务必更新本地主程序,以确保它包含合并到远程主程序中的最新更改:
git pull origin main
从更新的主分支创建一个新的功能分支 现在,按照与步骤 2 相同的过程创建下一个功能分支:
git checkout -b 功能/下一个功能
通过额外提交解决现有 PR 如果您已经有包含来自其他分支的提交的 PR,您可以通过将功能分支重新定位到最新的主分支来修复它们:
切换到有问题的功能分支:
git checkout feature/problematic-branch
将分支重新设置为最新的主分支:
git fetch origin
git rebase origin/main
强制将已清理的分支推回远程存储库(因为变基会重写历史记录):
git push --force
这会从您的分支中删除不相关的提交,并确保 PR 仅包含预期的更改。