用于向开源项目拉取请求的最佳git工作流/策略



我正在为公共项目寻找清晰、简单和最佳的工作策略,其中包括:

  1. 拉动最近的更改
  2. 将我的作品添加到历史之上
  3. 提交具有干净历史记录的pull请求以供审查

最优我指的是最小的步骤数,最重要的是-

最大程度的自动化和最小的冲突机会


在我的设置中,我正在处理本地dev分支。假设我决定它已准备好接受提取请求。我的步骤是什么?为了避免麻烦,应该遵守什么规则?

  1. 我首先需要确保我最近的commits位于当前历史的顶部。因此,我需要在最近的公开更改之上rebase我的新提交。我不想用merge来避免额外的merge commit,这与公众利益无关:

    git rebase origin/master dev

  2. 现在,我的新commit历史记录是干净的,并且位于最新的公共master分支之上。我不能将它直接push发送到公共origin,因为我没有写访问权限。相反,我将其推送到Github上的分叉远程存储库。但问题是:

我应该把它推到哪个远程分支

问题是清理历史-我希望远程分支与本地dev完全相同。因此,最好的候选者似乎是从origin/master:克隆的新特征分支

在Github上有什么简单的方法吗

  1. 现在我的分叉回购中有origin/master的精确副本,因为我的新分支称为new-feature-x。我需要将其更新为本地dev分支的精确副本:

什么是最简单、最可靠的方法

  1. 所以希望现在我的分叉回购上有分支new-feature-x,我可以向origin回购提交拉取请求。假设(并希望)不会有任何冲突,这一步很容易

因此,如果能很好地回答上述问题,这将是一个完美的策略。

感谢您的帮助!


编辑。

许多来源都提到了一个成功的Git分支模型。然而,这似乎不适合有许多合作者的公共项目。公共项目甚至可能没有development分支或任何类似的分支。在我的本地回购中无限期地拥有这样一个分支机构可能会很痛苦,因为无论接受/修改/拒绝什么样的提款请求,都会更新它

此外,此模型建议保留所有合并记录。但我的内部合并对公共没有任何用处,只会增加不必要的开销。如上所述,我想用清理历史发出一个Pull Request,以使维护人员的工作尽可能简单


我发现以下命令在任何push:之前都非常有用

git pull --rebase upstream master

在这里,我使用名为"upstream"的远程来进行公共回购(而"origin"用于我自己的分叉)。

此命令将提取公共回购主分支的当前状态,并将其与我即将提交用于提取请求的本地功能分支同步。如果有任何冲突,我可以在这个阶段看到并解决所有冲突——在我的本地机器上很方便。

这样做后,在提出实际的拉取请求时发生冲突的可能性要小得多。

一旦分叉,就应该立即使用git checkout -b feature-branch(当然要为feature-branch取一个合适的描述性名称)。一旦在本地添加了一些提交,就可以执行git push -u origin feature-branch在远程分叉上创建该分支。该分支中的未来推送不需要这些参数。

一旦您完成了工作,那么您只需向项目指定的任何分支发出pull请求根据指导原则,可能是masterdev或其他什么。

不过,我要提醒大家不要过多地使用git rebase,因为如果其他人拉了同一个分支,那么你重新设置了基础和git push -f,那么突然之间你就有了两个不同的历史,可能会发生糟糕的事情。

附加读数:

  • 分叉回购
  • 使用拉取请求
  • Git流分支模型(不一定是特定于GitHub的)

最新更新