如何创建一个可以同步到上游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
,然后从 Branch1
向 upstream
发送拉取请求。这种方法在当前 github 系统中可行吗?如果是的话,你能告诉我具体怎么做吗?
编辑
结合以下评论、答案和我自己的搜索,我解决了这个问题。我所做的是以下内容:
git checkout -b Branch1 upstream/master
,这将获得 upstream/master
的相同副本,并将其作为名为 Branch1
的新分支
git checkout Branch1
,并在文件 config
中,将 Branch1
的遥控器更改为 origin
git checkout master somefolder
,master此时应该是origin/master
。
git commit -m 'message'
git push
、somefolder
会被推送到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/master
和 git 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/
我在项目经理的master分支上做了一个fork。按照我的理解,现在manager的master分支是upstream/master
,我刚刚fork的那个是origin/master
。我对 origin/master
做了几处更改,其中一些更改只是添加注释和代码以打印中间结果,这符合我自己的理解。但也有一些变化是新编写的代码。我在一次提交中提交了所有更改。但我只想为新创建的代码向 upstream/master
发送拉取请求。正如 this Stack Overflow question 中所述,我没有一个简单的解决方案来实现我的目标。
现在我想在origin
创建另一个分支Branch1
,这个分支应该和upstream
一样,然后我只提交新写的代码到Branch1
,然后从 Branch1
向 upstream
发送拉取请求。这种方法在当前 github 系统中可行吗?如果是的话,你能告诉我具体怎么做吗?
编辑
结合以下评论、答案和我自己的搜索,我解决了这个问题。我所做的是以下内容:
git checkout -b Branch1 upstream/master
,这将获得upstream/master
的相同副本,并将其作为名为Branch1
的新分支
git checkout Branch1
,并在文件config
中,将Branch1
的遥控器更改为origin
git checkout master somefolder
,master此时应该是origin/master
。git commit -m 'message'
git push
、somefolder
会被推送到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
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/master
和 git 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/