【问题标题】:git collaborate on branchgit 在分支上协作
【发布时间】:2017-03-07 06:09:36
【问题描述】:

Tom 和 Alice 将在 project 的一个分支上进行合作,该分支托管在 Github 上。到目前为止发生的事情如下:

  1. Tom forks project.
  2. Tom 在他的 fork 中创建了分支 new-feature
  3. Tom 将更改提交到 new-feature
  4. 爱丽丝分叉project
  5. 爱丽丝:git remote add toms-fork git@githum.com:Tom/project.git
  6. 爱丽丝:git fetch toms-fork
  7. 爱丽丝:git checkout toms-fork/new-feature

    注意:检查“toms-fork/new-feature”。

    您处于“分离 HEAD”状态。你可以环顾四周,做实验 更改并提交它们,您可以丢弃您在此所做的任何提交 在不影响任何分支的情况下执行另一次结帐。

    如果你想创建一个新分支来保留你创建的提交,你可以 再次使用 -b 和 checkout 命令来执行此操作(现在或以后)。示例:

    git checkout -b

所以,这让爱丽丝(我)感到困惑。我是否需要创建自己的分支并向 Tom 提交 PR 以合并到我的分支到 toms-fork/new-feature,然后合并到 project

另外,为什么爱丽丝(我)处于detached HEAD 状态?为什么我不在toms-fork/new-feature

【问题讨论】:

  • 你得到了帮助你解决问题的答案吗?如果是,请标记它。它将帮助其他有类似问题的人。

标签: git github version-control collaboration


【解决方案1】:

您检查了名为toms-fork/new-feature 的远程跟踪分支。这使您处于分离的 HEAD 状态,这不是您想要的。相反,您可能打算这样做:

git checkout toms-fork/new-feature
git checkout -b alice-branch         # create a new branch from new-feature

然后,在此分支上完成所有工作,当需要将您的工作合并回 new-feature 时,您可以在 alice-branch 上发出拉取请求。这假设您想与您的合作者 Tom 共享 new-feature。如果你想要自己的分支,你也可以直接从master 分支在project 分支中创建一个,例如

git checkout master
git checkout -b alice-branch

然后,Tom's 和您的分支最终都会合并回 project

【讨论】:

  • ",您可以在您的 alice-branch 上发出拉取请求。"这部分你是怎么做的?它是 toms-fork/new-feature.. 的 PR 吗?
  • 告诉这个问题的答案。如果您希望您的工作进入new-feature,然后发布一个 PR 并以此为目的地。如果您希望它返回到master,请为此发出 PR。
  • 创建拉取请求是一个两步过程。首先,通过git push origin alice-branch 将您的分支推送 到 GitHub。然后,在 GitHub 站点中,创建一个拉取请求并选择您想要的目标。就是这样。
  • 哦,好的。谢谢蒂姆,我想我刚才做得对。感谢你的帮助。在学习的过程中,有时我很难将 git 与 Github 分开。
【解决方案2】:

当您结帐到toms-fork/new-feature 时,您处于分离的 HEAD 状态,这是由分支 toms-fork/new-feature 不是您的本地分支引起的。

如果你和 Tom 在 toms-fork/new-feature 分支上合作,你和 Tom 可以在同一个 github repo 上使用,例如 git@githum.com:Tom/project.git(如果你们都可以的话)。

由于私人原因,您不能获得 Tom 的 github repo 的许可。因此,您需要创建本地分支并向 Tom 提交 PR。然后 Tom 向项目提交 PR(或者你们两个都可以向 project 提交 PR)。

如果您的本地更改需要基于toms-fork/new-feature,您可以使用以下步骤:

# on master branch
git checkout -b mybranch
git rebase toms-fork/new-feature
make/commit/push your changes to toms-fork and submit a PR

【讨论】:

  • 为什么要变基而不是合并?
  • 通常rebase与merge相反。如在b1 分支上,使用git rebase b2,它将重播b1b2 之上的变化。但是如果b2 不是本地分支,rebase 就不同了。
猜你喜欢
  • 2016-10-14
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2019-08-19
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多