Git子树工作流程

时间:2011-06-25 00:43:52

标签: git git-workflow git-subtree

在我目前的项目中,我使用的是一个开源论坛(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所以也许这是错误的方法。另外,我真的不想把我的历史与香草历史混为一谈。

4 个答案:

答案 0 :(得分:3)

如果您希望使用子树,则可能需要使用git subtree。它为这类事物提供了一个更友好的用户界面,包括在子树中合并的合并/拉取命令(压缩是可选的)和拆分/推送命令,以便将更改拆分为子树并将它们发送回自己的回购。

答案 1 :(得分:3)

我完成了这个计划:

  1. 使用开发分支处理子树中的文件。

  2. 使用压缩的开发提交更新子树分支:

      

    git merge -s subtree --squash --no-commit development

  3. 使用其远程存储库更新子树分支。

  4. 使用压缩的子树提交更新开发
      

    git merge --squash -s subtree --no-commit 子树

  5.   

答案 2 :(得分:1)

使用

git merge --squash -s subtree --no-commit vanilla

不会“覆盖”您的更改。我希望通过“更新提交”你的意思是你在子树合并之后做的提交,因为它有--no-commit并且不会自己提交。

答案 3 :(得分:0)

我也不是git master(看看我在那里做了什么;-))...但是,我想你可能想看一下rebase命令:

http://book.git-scm.com/4_rebasing.html