我需要从另一个远程分支创建一个空的孤儿分支 问题是如果我签出到父分支,它将拉取文件,然后这些文件将包含在孤立分支中。或者,如果我想将这些更改添加回特定分支,那么从哪个分支创建分支是否重要?
有没有办法从分支创建孤立分支,而无需检入该分支?添加遥控器后,我尝试了
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
”,并在主分支以外的分支中结束?
答案 0 :(得分:2)
如果你想来自:
x--x--x--x--x (origin/master)
\
Y--y--y (origin/abranch)
到当地的孤儿分支:
Y--y--y (abranch)
你需要:
git checkout --orphan abranch
cherry-pick the remote branch:
git cherry-pick Y^..origin/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"。