2011-06-25 172 views
3

在我目前的项目中,我使用的是开源论坛(https://github.com/vanillaforums/Garden)。我打算做这样的事情:Git子树工作流程

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 

这样我可以做出改变成香草文件夹(如更改配置),并提交到我的主分支,我也可以切换到我的香草分支获取更新。我的问题是,当我尝试合并分支一起

git checkout vanilla 
git pull 
git checkout master 
git merge --squash -s subtree --no-commit vanilla 
git commit -a -m "update commit" 

的问题是,“更新承诺”在我提交的顶云和“覆盖”我的变化。我宁愿让我的提交在更新之前重播。有没有简单的方法来做到这一点?我不擅长git,所以也许这是错误的做法。另外,我真的不想把我的历史和香草历史混为一谈。

+1

我有同样的问题,我只想这样做(从http:// git-scm。com/book/en/Git-Tools-Subtree-Merging):“Rack项目中的所有更改都已合并并准备在本地提交,您也可以做相反的操作 - 在主分支机架子目录中进行更改然后将它们合并到您的rack_branch分支中,以便将它们提交给维护者或将其推送到上游。“然后执行合并命令。他们提到它,但没有示例命令。 – Rivera

+0

@ernipiggy您是否找到了从子树推送的方法? – abel

+1

@abel我试着在下面解释 – Rivera

回答

3

我完成了这个计划:

  1. 工作对我发展分支触摸文件从子树

  2. 更新分支压扁发展提交:

    混帐合并-s子树--squash --no提交发展

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

  4. 更新发展与压扁提交:

    混帐合并--squash -s子树--no提交

0

我也是没有一个Git主(见我做什么有;-))...但是,我想你可能想看看在底垫命令:

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

+2

谢谢,但我没有看到rebase命令如何可以有任何帮助,因为这两个分支不共享任何常见的“基础”。 – Cedric

1

使用

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

不会“覆盖”您的更改。我希望通过“更新提交”来表示您在子树合并后所做的提交,因为它具有--no-commit,并且不会自行提交。

+0

是的。不过,从那时起,我能够获得正确行为的唯一方法就是重新设置-i,并在我的更改下推回提交,并且我不太喜欢那样.. – Cedric

3

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