给定一个orphan没有历史记录的master分支,从创建孤立的那一刻开始,我将如何合并在分支上完成的更改,而不会在远程推送孤立时复制所有提交历史记录.
A <- B <- C <- D
orphan(created from state B) <-X <- Y
Run Code Online (Sandbox Code Playgroud)
我想带c和d以孤儿分支,然后x和y掌握.
如果我做checkout orphan, merge master或rebase master孤儿获得提交,还有所有历史树.例如,当我将孤儿推送到远程服务器时,每个人都能够看到所有master's历史记录.
后来我想合并orphan回主人,带来提交x和y那里.
现在将孤儿合并到大师的工作正常 git merge
A <- B <- C <- D <------X <- Y
/
orphan <-X <- Y
Run Code Online (Sandbox Code Playgroud)
但是,合并master回orphan要么将整个主历史记录放入孤儿(例如X先前B)或樱桃挑选,但我需要跳过合并提交并且还会遇到更多冲突
移植物正是为此而构建的。
root=$(git rev-list my-orphan-branch --max-parents=0) # get the orphaned-branch root
echo $(git rev-parse $root B) >.git/info/grafts # locally remember its real parent
Run Code Online (Sandbox Code Playgroud)
现在所有本地命令都会知道祖先,但它将保留在存储库本地,push 和 fetch 不会导出它。