git:在使用子模块时如何很好地将更改恢复为master

我使用本博客文章中描述的git工作流程。 简而言之:每个人都在他/她自己的分支内部发展,在合并回主人之前,你将你的分支再次变为掌握以获得干净的历史。

这很有效。

现在我们有一个子模块,因为这是一个内部插件(Rails),我们需要经常更改它。 所以大多数时候我在一般分支和子模块分支都有变化。

如上所述,在工作流程中使用子模块的最佳方法是什么。

我首先尝试将我的更改推送到子模块(git checkout master,git pull,git checkout branch,git rebase master,git checkout master,git merge branch)。

然后,当我尝试为我的root做同样的事情时,我总是在我的插件(子模块)上出错。 我必须在执行git rebase --continue之前解决错误。 因此,如果尝试git mergetool我将我的文件夹转换为文件。

在rebase结束后,我只是恢复.orig来覆盖文件 ,一切都很好。

但不知何故,它感觉应该有更好的方法。

简而言之:当通过checkout-b / rebase / merge – 工作流程工作时,如何同时处理更改的子模块?

无论您使用子模块执行什么工作流程,都有一条规则您不应该忘记:
(来自Git教程)

如果要在子模块中进行更改,则应首先检出分支,进行更改,在子模块中发布更改, 然后更新超级项目以引用新提交

 $ git checkout master $ echo "adding a line again" >> a.txt $ git commit -a -m "Updated the submodule from within the superproject." $ git push $ cd .. $ git add a # There is a gotcha here. Read about it below. $ git commit -m "Updated submodule a." 

那么在从所述父项目尝试重组/合并之前,您是否在父项目中提交了子模块的新状态?