如何创建一个可以同步到上游master的分支?

How to create a branch which can be synced to upstream master?

我在项目经理的master分支上做了一个fork。按照我的理解,现在manager的master分支是upstream/master,我刚刚fork的那个是origin/master。我对 origin/master 做了几处更改,其中一些更改只是添加注释和代码以打印中间结果,这符合我自己的理解。但也有一些变化是新编写的代码。我在一次提交中提交了所有更改。但我只想为新创建的代码向 upstream/master 发送拉取请求。正如 this Stack Overflow question 中所述,我没有一个简单的解决方案来实现我的目标。

现在我想在origin创建另一个分支Branch1,这个分支应该和upstream一样,然后我只提交新写的代码到Branch1,然后从 Branch1upstream 发送拉取请求。这种方法在当前 github 系统中可行吗?如果是的话,你能告诉我具体怎么做吗?

编辑

结合以下评论、答案和我自己的搜索,我解决了这个问题。我所做的是以下内容:

  1. git checkout -b Branch1 upstream/master,这将获得 upstream/master 的相同副本,并将其作为名为 Branch1
  2. 的新分支
  3. git checkout Branch1,并在文件 config 中,将 Branch1 的遥控器更改为 origin
  4. git checkout master somefolder,master此时应该是origin/master
  5. git commit -m 'message'
  6. git pushsomefolder会被推送到Branch1

使用 github 时的工作流程是 git 命令和 github 上操作的混合。假设您的经理存储库位于 https://github.com/manager/repo,您在 github 上的名字是 allanqunzi

1) 在 github 上分叉回购,这样你就可以在 https://github.com/allenqunzi/repo

下找到回购

2) 使用 git clone git@github.com:allenqunzi/repo.git

将此 repo 克隆到您的机器

3) git remote -v 的输出应该只显示一个名称为 origin 的遥控器指向你在 git@github.com:allenqunzi/repo.git

的仓库

4) 进行更改并提交。用 git push origin master 将它们推送到你的 repo

5) 转到 github 并打开一个拉取请求。它应该在您的经理的回购中显示为新的拉取请求。它说你希望有人将 allenqunzi/repo master 合并到 manager/repo master.

6) 有人接受了 PR,你的代码终于进入了你的经理仓库。

可选信息 A)

如果您在 manager/repo 中工作时遇到一些问题并且您在本地需要它,您可以使用 git remote add upstream git@github.com:manager/repo.git 添加管理器存储库作为第二个远程。 git remote -v 现在显示两个不同的遥控器。现在你可以做 git fetch upstream/mastergit merge upstream/master 来更新你的本地仓库,然后用 git push origin master 推送它来更新你在 github 上的仓库。

可选信息 B)

您还可以在不同的分支中添加提交,推送该分支并从该分支打开 PR 到您的管理器存储库的主分支。

可选信息 C)

如果您只想将某些 files/commits 添加到管理器存储库,请在本地创建一个新分支。然后 cherry-pick 所有提交到这个分支。或者复制所有你想要更改的文件,然后进行新的提交。推送此分支并使用此分支打开拉取请求(有关更多信息,请参见 B)

进一步阅读

两个资源可能也有帮助(它们的解释有点相同,但可能更清楚一些;))

"Fork a repo" https://help.github.com/articles/fork-a-repo/

"Syncing a fork" https://help.github.com/articles/syncing-a-fork/