如何为你分叉的项目做出贡献?
How to contribute to a project you've forked?
假设我已经分叉 https://github.com/user/proj.git 并且在我的分叉(的主分支)上做了重要的开发。
我想解决上游遇到的问题(我还没有在我的 fork 中修复)。如果我理解正确,我应该在上游最后一次签入他们的主人的基础上创建一个功能分支:
git fetch upstream
git checkout upstream/master
git checkout -b my_new_feature
这些命令中的第二个让我知道我处于 'detached HEAD' 状态..有什么我需要关心的吗(了解执行此任务)?
现在我进行更改,然后 git add
和 git commit
更改的文件,然后 git push
到 github,但是当我创建拉取请求时,我'我告诉我无法自动合并我的拉取请求,因为我所做的更改与我完成 git fetch
.[=19= 后签入 upstream/master
的更改之间存在冲突]
冲突的更改在语义上是等价的,所以我想推迟到 upstream/master
的版本。我如何在解决冲突时将我的拉取请求从 upstream/master
变基(这就是我想做的,对吗?)? (我精通 Subversion 和 git 的新手,如果这有助于回答..)
当您在 github 上创建项目时,您会创建自己的并行存储库。
Github 在原始项目上使用 "pull requests" 以允许您请求那些具有提交权限的人从您的复刻中提取更改。
is this pull request that is problematic, since it includes a conflict with changes done to upstream/master after I branched off of it
the steps needed to "provide him a proper rebased branch"?
一个“适当的 rebased 分支”是指在 upstream/master
之上的一个分支 rebased(上游是你分叉的原始 repo 的名称)
git fetch upstream
git checkout myBranch
git rebase upstream/master
(我也在“Pull new updates from original Github repository into forked Github repository”中描述了那一步)
如果你想稍微清理一下你的分支的历史,你也可以做一个 rebase interactive (git rebase -i
)
这样,您可以解决本地克隆中的任何冲突,并且 git push --force
您的分支到您的分支。
如果您已经有一个 PR(拉取请求)在进行中,它会自行更新以考虑到您的 rebased 分支的修订历史。
原始项目的维护者的目标仍然是将您的分支合并到 his/her master 分支中,并通过简单的合并(0 冲突)来完成。
完成 Thorbjørn Ravn Andersen 的回答和评论:
首先,您应该为维护者提供一个无痛合并,这意味着关于 master 分支是最新的。
当维护者合并拉取请求时,他可以选择以下方式:
- 将其压缩为一次提交。
- 将拉取请求树合并为一个整体。
在第一个选项中,提交的 size/comments/separation 并不重要,因为所有内容都是由维护者评论的一次提交。
在第二个选项中,分支的每次提交都很重要。所以每个提交都必须代表一个逻辑工作单元(例如,你不应该提交修复你在分支中引入的错误,或者提交导致非功能性项目)。您可以随时推动您的拉取请求分支使其变得漂亮。
关于在 master 分支上保持最新,您应该应用相同的逻辑。提交 "Merge master into Pipo" 根本没有用,您应该重新设置分支以使 "merge" 不可见。
最后但同样重要的是,每个维护者都有自己的习惯,所以如果代码、测试和文档总是单独或分组提交,你也应该这样做。无论如何,当你 post 一个拉取请求时,如果维护者发现了一些可以讲述的东西,你可以与他讨论并按照他认为适合合并的方式进行更改。
假设我已经分叉 https://github.com/user/proj.git 并且在我的分叉(的主分支)上做了重要的开发。
我想解决上游遇到的问题(我还没有在我的 fork 中修复)。如果我理解正确,我应该在上游最后一次签入他们的主人的基础上创建一个功能分支:
git fetch upstream
git checkout upstream/master
git checkout -b my_new_feature
这些命令中的第二个让我知道我处于 'detached HEAD' 状态..有什么我需要关心的吗(了解执行此任务)?
现在我进行更改,然后 git add
和 git commit
更改的文件,然后 git push
到 github,但是当我创建拉取请求时,我'我告诉我无法自动合并我的拉取请求,因为我所做的更改与我完成 git fetch
.[=19= 后签入 upstream/master
的更改之间存在冲突]
冲突的更改在语义上是等价的,所以我想推迟到 upstream/master
的版本。我如何在解决冲突时将我的拉取请求从 upstream/master
变基(这就是我想做的,对吗?)? (我精通 Subversion 和 git 的新手,如果这有助于回答..)
当您在 github 上创建项目时,您会创建自己的并行存储库。
Github 在原始项目上使用 "pull requests" 以允许您请求那些具有提交权限的人从您的复刻中提取更改。
is this pull request that is problematic, since it includes a conflict with changes done to upstream/master after I branched off of it
the steps needed to "provide him a proper rebased branch"?
一个“适当的 rebased 分支”是指在 upstream/master
之上的一个分支 rebased(上游是你分叉的原始 repo 的名称)
git fetch upstream
git checkout myBranch
git rebase upstream/master
(我也在“Pull new updates from original Github repository into forked Github repository”中描述了那一步)
如果你想稍微清理一下你的分支的历史,你也可以做一个 rebase interactive (git rebase -i
)
这样,您可以解决本地克隆中的任何冲突,并且 git push --force
您的分支到您的分支。
如果您已经有一个 PR(拉取请求)在进行中,它会自行更新以考虑到您的 rebased 分支的修订历史。
原始项目的维护者的目标仍然是将您的分支合并到 his/her master 分支中,并通过简单的合并(0 冲突)来完成。
完成 Thorbjørn Ravn Andersen 的回答和评论:
首先,您应该为维护者提供一个无痛合并,这意味着关于 master 分支是最新的。
当维护者合并拉取请求时,他可以选择以下方式:
- 将其压缩为一次提交。
- 将拉取请求树合并为一个整体。
在第一个选项中,提交的 size/comments/separation 并不重要,因为所有内容都是由维护者评论的一次提交。
在第二个选项中,分支的每次提交都很重要。所以每个提交都必须代表一个逻辑工作单元(例如,你不应该提交修复你在分支中引入的错误,或者提交导致非功能性项目)。您可以随时推动您的拉取请求分支使其变得漂亮。
关于在 master 分支上保持最新,您应该应用相同的逻辑。提交 "Merge master into Pipo" 根本没有用,您应该重新设置分支以使 "merge" 不可见。
最后但同样重要的是,每个维护者都有自己的习惯,所以如果代码、测试和文档总是单独或分组提交,你也应该这样做。无论如何,当你 post 一个拉取请求时,如果维护者发现了一些可以讲述的东西,你可以与他讨论并按照他认为适合合并的方式进行更改。