【问题标题】:Git subtree workflowGit 子树工作流程
【发布时间】:2011-06-25 00:43:52
【问题描述】:

在我当前的项目中,我使用的是开源论坛 (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 文件夹进行更改(例如更改配置)并将其提交到我的 master 分支,我也可以切换到我的 vanilla 分支以获取更新。我的问题是当我尝试将分支合并在一起时

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

问题是“更新提交”在我的提交之上并“覆盖”了我的更改。我宁愿在更新的基础上重播我的提交。有没有一种简单的方法可以做到这一点?我不太擅长 git,所以也许这是错误的方法。另外,我真的不想把我的历史和普通的历史混为一谈。

【问题讨论】:

  • 我也有同样的问题,我只想这样做(来自git-scm.com/book/en/Git-Tools-Subtree-Merging):“您的 Rack 项目中的所有更改都已合并并准备好在本地提交。您也可以这样做“然后执行合并命令。他们提到它,但没有示例命令。
  • @ernipiggy 你找到从子树推送的方法了吗?
  • @abel 我试着在下面解释一下
  • @ernipiggy 感谢您的回复

标签: git git-workflow git-subtree


【解决方案1】:

我完成了这个方案:

  1. 在我的 development 分支上工作,涉及 子树 中的文件。

  2. 用压缩的 development 提交更新 subtree 分支:

    git merge -s subtree --squash --no-commit 开发

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

  4. 用压缩的 subtree 提交更新 development

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用

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

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

      【讨论】:

      • 是的。尽管如此,从那时起,我可以获得正确行为的唯一方法是 rebase -i 并在我的更改下推回该提交,我真的不喜欢这样..
      【解决方案4】:

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

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

      【讨论】:

      • 谢谢,但我看不出 rebase 命令有什么帮助,因为这两个分支不共享任何共同的“基础”。
      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 2017-06-09
      • 2010-10-25
      • 2015-05-16
      相关资源
      最近更新 更多