让我们说我已经分叉https://github.com/user/proj.git并在我的分支的(主分支)上做了重大的开发。
我想解决上游所遇到的问题(我没有修复我的问题)。如果我已经正确理解,我应该创建一个功能分支,从上游最后一次检查他们的主人:
git fetch upstream
git checkout upstream/master
git checkout -b my_new_feature
这些命令中的第二个让我知道我已经分离了HEAD'状态..是我需要关注的任何事情(理解这项任务)?
现在我做了我的更改,然后是git add
和git commit
已更改的文件,然后是git push
到github,但当我创建拉取请求时,我告诉我我的拉动请求无法自动合并,因为我完成的更改与我upstream/master
之后检查到git fetch
的更改之间存在冲突。
冲突的更改在语义上是等效的,所以我想遵循upstream/master
的版本。在解决冲突的过程中,我如何改变(这就是我想要做的,对吧?)我的upstream/master
拉取请求? (我非常精通Subversion和git的新手,如果这有助于回答..)
答案 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
)
这样,您就可以解决本地克隆中的任何冲突,并将git push --force
分支解析为您的分支
如果您已经有PR(拉取请求)正在进行中,它将自行更新,以便考虑您的重新分支的修订历史记录。
目标仍然是原始项目的维护者将你的分支合并到他/她的主分支中,并且通过简单的合并(0冲突)来实现。
答案 1 :(得分:1)
完成ThorbjørnRavnAndersen的回答和评论:
在此之前,你应该为维护者提供一个无痛的合并,这意味着关于主分支是最新的。
当维护者合并拉取请求时,他可以选择以下方式:
在第一个选项中,提交的大小/注释/分隔并不重要,因为所有内容都是维护者评论的一个提交。
在第二个选项中,分支的每次提交都很重要。因此,每个提交必须代表一个逻辑工作单元(例如,您不应该提交修复您在分支中引入的错误,或者提交导致非功能项目的提交)。您可以随时强制拉动请求分支以使其变得漂亮。
关于在主分支上更新,您应该应用相同的逻辑。提交“Merge master into Pipo”根本没有用,你应该修改你的分支以使“合并”不可见。
最后但并非最不重要的是,每个维护者都有自己的习惯,所以如果代码,测试和文档总是单独提交或分组,你应该这样做。无论如何,当你发布拉动请求时,如果维护人员发现要告诉你的事情,你可以和他讨论并按照他认为合并的方式进行改变。
答案 2 :(得分:0)
当您在github上分叉项目时,您可以创建自己的并行存储库。
Github使用"拉取请求"在原始项目上,允许您请求具有提交权限的人从您的分支中提取更改。