可以在没有提取文件的情况下git checkout到远程分支吗?

时间:2016-10-22 00:29:58

标签: git github

我需要从另一个远程分支创建一个空的孤儿分支 问题是如果我签出到父分支,它将拉取文件,然后这些文件将包含在孤立分支中。或者,如果我想将这些更改添加回特定分支,那么从哪个分支创建分支是否重要?

有没有办法从分支创建孤立分支,而无需检入该分支?添加遥控器后,我尝试了

git checkout --orphan orphan_branch parent_branch 

但它给我一个错误“Cannot update paths and switch to branch 'orphan_branch' at the same time.

或者,是否可以运行“git remote add origin giturl”,并在主分支以外的分支中结束?

1 个答案:

答案 0 :(得分:2)

如果你想来自:

 x--x--x--x--x    (origin/master)
        \
         Y--y--y  (origin/abranch)

到当地的孤儿分支:

Y--y--y (abranch)

你需要:

根据您的情况,您可能会发现Y(来自origin/abranch 的第一次提交而不是origin/master中的)" {{3} }":

git log origin/master..origin/abranch --oneline | tail -1

如果origin/abranch具有如上所示的单个合并基础,则使用how to find first commit of specific branch查找Y^({1}}的父提交,因为Y没有包括第一个提交本身):

cherry-pick
  

或者,如果我想将这些更改添加回特定分支,那么创建另一个分支的分支是否重要?

分支只是一个指针,可以帮助引用从其HEAD可访问的所有提交。如果从另一个分支产生分支,这意味着所有其他分支提交也是新分支的一部分 见" git merge-base"和" Using branches"。

最好在它所来自的分支中合并一个分支(不完全是"父"分支,因为没有分支的祖先概念)

git cherry-pick $(git merge-base origin/master origin/abranch)..origin/abranch

如果你不这样做,那就意味着oyu会挑选或者重新定位 - 这会更复杂并且冒着重复提交的风险。
那将来自:

  x--x--x--x--x--M (master)
   \            /
    Y--y------y    (abranch)

收件人( x--x--x--x--x (master) \ p--p--p (anotherbranch) \ Y--y--y (abranch) ):

git rebase --onto master $(git merge-base anotherbranch abranch) abranch

然后,您可以将 Y'--y'--y' (abranch) / x--x--x--x--x (master) \ p--p--p (anotherbranch) 快进到abranch

要使用分支进行更多实验,请参阅" Git Branching - Branches in a Nutshell"。