我有一个有几个架子的分支,这个分支现在已经停止开发,因为我们从它分支了一个新分支。现在我需要接管我搁置的更改,而无需将旧分支修改为新分支。最简单的方法是什么?
我知道我可以取消搁置,手动接管更改并恢复旧分支,但这很乏味。有更好的解决方案吗?
我有一个有几个架子的分支,这个分支现在已经停止开发,因为我们从它分支了一个新分支。现在我需要接管我搁置的更改,而无需将旧分支修改为新分支。最简单的方法是什么?
我知道我可以取消搁置,手动接管更改并恢复旧分支,但这很乏味。有更好的解决方案吗?
每个变更集都需要几个步骤。
在旧分支目录中,执行:
bzr unshelve --keep ID
在新的分支目录中,执行:
bzr merge --uncommitted OLD_BRANCH_DIRECTORY
bzr shelve --all -m MESSAGE
回到旧分支,执行以下操作:
bzr revert
让它回到原来的状态。
unshelve 操作将更改放在旧分支的工作目录中,merge 将它们转移到新分支的工作目录中,shelve 操作执行其通常的工作,revert 将旧分支重置为其原始状态。
根据需要选择 ID、OLD_BRANCH_DIRECTORY 和 MESSAGE。对每个搁置的变更集重复此操作。
也许最干净和最好的方法是创建旧分支的副本,将架子转换为正确的提交,然后合并它们。例如:
cd /path/to/repo
mv oldbranch work # we will unshelve in "work"
bzr branch work oldbranch # the replica, but without shelves
cd work
bzr unshelve
bzr commit -m 'some change'
bzr unshelve
bzr commit -m 'another change'
cd ../targetbranch
bzr merge ../work
另一种方法,但不太干净,可能是使用bzr unshelve --preview
和patch
命令:
bzr unshelve --preview -d /path/to/oldbranch | patch -d /path/to/targetbranch
但我真的推荐第一个选项。