在我目前的项目中,我使用的是一个开源论坛(https://github.com/vanillaforums/Garden)。我打算做这样的事情:
git remote add vanilla_remote https://github.com/vanillaforums/Garden.git
git checkout -b vanilla vanilla_remote/master
git checkout master
git read-tree --prefix=vanilla -u vanilla
这样我可以更改为vanilla文件夹(比如更改配置)并将其提交到我的主分支,我也可以切换到我的vanilla分支来获取更新。我的问题是当我尝试将分支合并在一起时
git checkout vanilla
git pull
git checkout master
git merge --squash -s subtree --no-commit vanilla
git commit -a -m "update commit"
问题是“更新提交”会在我的提交之上进行,并“覆盖”我的更改。我更愿意在更新的基础上重播我的提交。有一个简单的方法吗?我不是很擅长git所以也许这是错误的方法。另外,我真的不想把我的历史与香草历史混为一谈。
答案 0 :(得分:3)
如果您希望使用子树,则可能需要使用git subtree
。它为这类事物提供了一个更友好的用户界面,包括在子树中合并的合并/拉取命令(压缩是可选的)和拆分/推送命令,以便将更改拆分为子树并将它们发送回自己的回购。
答案 1 :(得分:3)
我完成了这个计划:
使用开发分支处理子树中的文件。
使用压缩的开发提交更新子树分支:
git merge -s subtree --squash --no-commit development
使用其远程存储库更新子树分支。
git merge --squash -s subtree --no-commit 子树
答案 2 :(得分:1)
使用
git merge --squash -s subtree --no-commit vanilla
不会“覆盖”您的更改。我希望通过“更新提交”你的意思是你在子树合并之后做的提交,因为它有--no-commit
并且不会自己提交。
答案 3 :(得分:0)
我也不是git master(看看我在那里做了什么;-))...但是,我想你可能想看一下rebase命令: