git在分支上合作

问题描述:

汤姆和艾丽斯将在Github上托管的project分支上合作。以下是目前为止发生的事情:git在分支上合作

  1. 汤姆叉project
  2. 汤姆在他的叉子中使分支new-feature
  3. Tom提交更改为new-feature
  4. Alice forks project
  5. Alice:git remote add toms-fork [email protected]:Tom/project.git
  6. 爱丽丝:git fetch toms-fork
  7. 爱丽丝:git checkout toms-fork/new-feature

    注:检查出 '汤姆斯叉/新功能'。

    你处于'分离状态'状态。你可以四处看看,做实验 更改并提交它们,你可以放弃你在这个 状态下的任何提交,而不会影响任何分支通过执行另一个结账。

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

    git的结帐-b

所以,这混淆爱丽丝(我)。我是否需要建立自己的分支并向汤姆提交PR以合并到我的分支toms-fork/new-feature,然后合并为project

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

+0

你有没有得到帮助你来解决这个问题的答案吗?如果是,请标记它。它会帮助其他有类似问题的人。 –

您签出名为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 

然后,汤姆和你的分支最终将合并回project

+0

“,您可以在您的爱丽丝分支上发出拉取请求。”你如何做这部分?它是否是一个公关汤姆叉/新功能..? –

+0

_你告诉_me_这个问题的答案。如果你想让你的工作进入“新功能”,那么发布一个PR作为目的地。如果你想让它回到'master',那么发布一个PR。 –

+1

创建拉请求是一个两步过程。首先,通过'git push origin alice-branch'将你的分支推送到GitHub。然后,从GitHub站点内部创建一个请求并选择你想要的目的地。而已。 –

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

如果你和Tom合作为toms-fork/new-feature分支,你和Tom可以在同一个github仓库上使用,比如[email protected]:Tom/project.git(如果你们俩都可以)。

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

如果你的本地修改需要根据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 
+0

为什么要重组而不是合并? –

+0

通常rebase与合并相反。比如在'b1'分支上,使用'git rebase b2',它会重放从'b1'到'b2'顶部的变化。但是如果'b2'不是本地分支,rebase是不同的。 –