如何为您分叉的项目做出贡献?

时间:2015-01-16 16:03:41

标签: git github

让我们说我已经分叉https://github.com/user/proj.git并在我的分支的(主分支)上做了重大的开发。

我想解决上游所遇到的问题(我没有修复我的问题)。如果我已经正确理解,我应该创建一个功能分支,从上游最后一次检查他们的主人:

git fetch upstream
git checkout upstream/master
git checkout -b my_new_feature

这些命令中的第二个让我知道我已经分离了HEAD'状态..是我需要关注的任何事情(理解这项任务)?

现在我做了我的更改,然后是git addgit commit已更改的文件,然后是git push到github,但当我创建拉取请求时,我告诉我我的拉动请求无法自动合并,因为我完成的更改与我upstream/master之后检查到git fetch的更改之间存在冲突。

冲突的更改在语义上是等效的,所以我想遵循upstream/master的版本。在解决冲突的过程中,我如何改变(这就是我想要做的,对吧?)我的upstream/master拉取请求? (我非常精通Subversion和git的新手,如果这有助于回答..)

3 个答案:

答案 0 :(得分:1)

  

这个拉取请求是有问题的,因为它包括与我分支后对上游/主机所做的更改的冲突

     

需要采取的步骤,为他提供一个适当的重新分支"?

A"适当的重新分支"表示在upstream/master之上重新分支的分支(上游是您分叉的原始仓库的名称)

git fetch upstream
git checkout myBranch
git rebase upstream/master

(我还在" Pull new updates from original Github repository into forked Github repository")

中描述了这一步骤

如果您想清理分支的历史记录(git rebase -i

,您也可以进行rebase交互式

这样,您就可以解决本地克隆中的任何冲突,并将git push --force分支解析为您的分支 如果您已经有PR(拉取请求)正在进行中,它将自行更新,以便考虑您的重新分支的修订历史记录。

目标仍然是原始项目的维护者将你的分支合并到他/她的主分支中,并且通过简单的合并(0冲突)来实现。

答案 1 :(得分:1)

完成ThorbjørnRavnAndersen的回答和评论:

在此之前,你应该为维护者提供一个无痛的合并,这意味着关于主分支是最新的。

当维护者合并拉取请求时,他可以选择以下方式:

  • 将其压缩成一次提交。
  • 合并拉取请求树作为一个整体。

在第一个选项中,提交的大小/注释/分隔并不重要,因为所有内容都是维护者评论的一个提交。

在第二个选项中,分支的每次提交都很重要。因此,每个提交必须代表一个逻辑工作单元(例如,您不应该提交修复您在分支中引入的错误,或者提交导致非功能项目的提交)。您可以随时强制拉动请求分支以使其变得漂亮。

关于在主分支上更新,您应该应用相同的逻辑。提交“Merge master into Pipo”根本没有用,你应该修改你的分支以使“合并”不可见。

最后但并非最不重要的是,每个维护者都有自己的习惯,所以如果代码,测试和文档总是单独提交或分组,你应该这样做。无论如何,当你发布拉动请求时,如果维护人员发现要告诉你的事情,你可以和他讨论并按照他认为合并的方式进行改变。

答案 2 :(得分:0)

当您在github上分叉项目时,您可以创建自己的并行存储库。

Github使用"拉取请求"在原始项目上,允许您请求具有提交权限的人从您的分支中提取更改。