这就是我希望我的工作流程在概念层面看起来像:
由于我既懒惰又是完美主义者,我希望能够做一些不按顺序的事情:我可能会纠正一个错字,但忘了把它放在评论修复堆中;当我准备上游补丁(我正在使用git-svn,所以我需要非常慎重)时,我会在那时撤回注释修复。我可能会忘记将事情完全分开,直到最后。但是我可能/也已经/已经犯下了一些堆(抱歉,这个比喻正在崩溃......)。
这就像使用带有SVN的Eclipse变更集一样,只有我可以对不同堆中的同一文件进行不同的更改(不得不将变更分解为不同的提交,这是促使我转移到git-svn,实际上... ),和Git一起,我可以拥有完整的混乱变化历史,实验分支和所有,但仍然可以做出一个漂亮,整洁的补丁。
我最近刚开始和Git一起玩了很长一段时间后,到目前为止我很开心。然而,上述工作流程没有真正映射到Git的最大方式是“bin”实际上不能只是一个本地分支,因为工作树只能反映单个分支的状态。或者Git索引可能是“堆积”,我想要的是以某种方式(有效地)不止一个。
我可以想出几种方法来近似我想要的东西(可能是创造性地使用藏匿?错综复杂的藏匿 - 合并舞蹈?),但我对Git的掌握不够坚实,无法确定如何最好地放置所有的碎片在一起。据说Git比VCS更像是一个工具包,所以我想这个问题归结为:我如何用这些工具构建这个东西?
答案 0 :(得分:5)
听起来你想要做的就是每次单独做一些事情时创建大量的提交,然后使用git rebase -i
重新排序和组合你的提交,然后再将它们推到上游。
rebase
功能是Git真正强大的功能之一,它似乎非常适合您的操作模式。
由于您可以使用rebase
更改提交消息,因此您可以为每个相关提交添加“标记”,例如“COMMENT”或“UTILS”,这样您以后可以在使用{随机播放内容时轻松识别它们{1}}。
git rebase -i
的一个限制可能很尴尬 - 你只能向补丁发送补丁的“完整”集(从Git的角度来看)。也就是说,git svn dcommit
仅从您开始进行更改的点提交到HEAD。如果你想要保留以后批量提交的提交(比如你的拼写错误),那么你可以使用dcommit
为它们创建一个临时分支来保持最新状态。
我在“我要做的事情列表”中尝试为git rebase
制作补丁,让您选择要发送到Subversion的补丁。