【问题标题】:How to create a branch which can be synced to upstream master?如何创建一个可以同步到上游 master 的分支?
【发布时间】:2015-07-30 07:56:12
【问题描述】:

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

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

编辑

结合以下cmets,答案和我自己的搜索,我解决了这个问题。我所做的如下:

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

【问题讨论】:

  • 你是真的 fork 还是直接从他的存储库中克隆它?
  • @MadaraUchiha,是的,我确实从他的存储库中分叉,而不是克隆它。
  • 你在使用 github 吗?
  • @ben,是的,我正在与 github.com 合作
  • 好吧,你可以做git checkout -b Branch1 upstream/master

标签: git github pull-request


【解决方案1】:

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

1) fork github 上的 repo,这样你就有了 https://github.com/allenqunzi/repo 下的 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 将它们推送到您的仓库

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

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

可选信息 A)

如果当您在 manager/repo 中工作时发生变化并且您在本地需要它,您可以使用 git remote add upstream git@github.com:manager/repo.git 将 manager repo 添加为第二个遥控器。 git remote -v 现在显示两个不同的遥控器。现在你可以使用git fetch upstream/mastergit merge upstream/master 来更新你的本地repo,然后用git push origin master 推送它来更新你在github 上的repo。

可选信息 B)

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

可选信息 C)

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

进一步阅读

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

“fork a repo”https://help.github.com/articles/fork-a-repo/

“同步分叉”https://help.github.com/articles/syncing-a-fork/

【讨论】:

  • 我的问题是第 4 步。我在一次提交中对origin/master 进行了更改,在这些更改中,有一些我不想拉请求,也有一些我想拉取请求。现在我无法选择要拉取请求的特定文件,我只能拉取我所做的所有更改。
  • 添加了可选信息 C。这应该会有所帮助
猜你喜欢
  • 2015-04-22
  • 1970-01-01
  • 2020-10-11
  • 2018-02-20
  • 2020-09-06
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多