我最近参加了GitHub的一个项目。我做了以下事情:
将原始存储库分叉,将其克隆到我的本地计算机,创建一个分支来修复现有的bug,修复该分支中的bug,将该分支推送到我的repo,向存储库的作者发送一个pull请求以合并我的修复分支到其主分支。
这是我第一次提交另一个代码,所以我不知道该怎么做。现在我的pull请求已被作者合并到原始repo / project。
接下来该怎么做?我应该删除分支吗?我应该合并分支吗?还有什么吗?
原始项目只有一个分支。
我还有一个上游设置,可以从原始仓库中获取最新更新。 (我这样做了):
git remote add upstream https://path/to/original/repo.git
我得到这样的更新:
git fetch upstream
答案 0 :(得分:60)
接下来要做的是:继续提供新功能或修复自己专用分支中的其他错误(仅推送到您的分支)。
意味着你的叉子停留,但叉子里的分支可以来来去去。
如果您不打算进一步做出贡献,也可以删除分叉,但will remove the corresponding entry in 'Repositories you contribute to'。
更容易:
fix
分支(实际上, it is now deleted for you )(以及您当地的克隆代表:请参阅“Delete a Git branch both locally and remotely”)git pull upstream master
(如果master
是您的修补程序已经集成的分支:合并将是一个快速转换):此时不需要rebase。master
之上重新创建修复分支(现在使用最新的upstream master
)。但是,在提交任何 future 拉取请求之前,请不要忘记一步:
首先从上游目标分支重新绑定当前分支(fix
)
(upstream
是您分叉的原始回购:请参阅“What is the difference between origin and upstream in github”)
在将任何内容提交回原始仓库(“上游”)之前,您需要确保您的工作基于所述原始仓库中的最新(或拉动请求赢得') t一旦在upstream
repo上应用,就会导致快进合并
例如,请参阅“Workflow for managing pull requests on shared repos in github”。
换句话说,当您忙于修复内容时,upstream
可以进化(在其上推送新的提交)。您需要在上游的最新作品之上重播您的修补程序,以确保您的提交仍然与最新的upstream
兼容。
OP Santosh Kumar询问in the comments:
我已经从
upstream
拉到并合并为主人,现在是什么?
如果您最近的拉取请求后未进行任何新修复,请参阅上文(删除并在更新的fix
之上重新创建新分支master
)。
如果您在拉取请求后已经完成了更多工作,如果我想创建一个新拉取请求,我将不会从upstream
合并:我会拉和变基:
git pull --rebase upstream master
这样,我的所有新本地工作都会在最新的upstream
master
提交(在我的本地仓库中提取)之上重播,假设master
是目标分支,将整合我未来的拉动请求。
然后我可以将我的本地工作推到'origin
',这是我在upstream
的GitHub上的分叉。
从我在GitHub上的fork,我可以安全地发出一个pull请求,知道它只会向upstream
添加新的提交而不需要任何合并解析:在upstream
repo中合并这些新提交意味着一个简单的快进合并。
git pull --rebase
没有指定您想要重新绑定(当前已检出)fix
分支的分支将无效:
那(
git pull --rebase
)说:
You asked to pull from the remote '`upstream`', but did not specify a branch.
我最后应该追加大师吗?这将做什么?它会删除我的
fix
分支吗?
是的,您可以指定将成为拉取请求目标的分支,例如“master
”。
这不会删除您的fix
分支,但会在您的回购中提取的上游master
之上重播。
答案 1 :(得分:16)
首先,祝贺您对Github项目的第一次贡献。
通常的Github工作流程是为您解决的每个问题创建一个新分支。这样,主线存储库的维护者可以决定合并哪个解决方案以及拒绝哪个解决方案。在上游合并分支后,将不再需要分支,通常可以将其删除。