从工作树中的一堆变化中提交干净的提交

时间:2013-04-27 15:55:00

标签: git git-stash git-index

有时候我最终得到一个有很多变化的工作树,主要是在编码匆忙之后 - 变化很多,可以适应20次提交,分布在2或3个分支。为了清理工作树并很好地完成所有工作,我遵循这个令人不快的工作流程:

  1. 使用git add -p检查工作树中的所有帅哥,不用将任何东西保存到索引中(即回答“不,不要将此”分配给每个大块) )。与此同时,我尝试在精神上将帅哥分成提交,然后记下我应该用我所看到的帅哥建立的提交(在文本文件中)。

  2. 在我将每个hunk分配到提交后(在我的笔记中),然后我再次启动git add -p,并回答“是,将此阶段”仅回应进入第一次提交的人员。在经历了所有的挑战并挑选我想要的那些之后,我实际上是在做提交。

  3. 只要在git add -p中留下帅哥,就在步骤2重复。这意味着我会仔细检查所有的问题,因为我在笔记中的每次提交。

  4. 这显然是一次非常愚蠢的方式来处理许多变化。有没有一种很好的方法可以从许多变化开始,将它们整理出来然后以正确的分支结束一组很好的提交?

    也许有一种方法可以在多个索引中同时逐步构建多个提交。或者也许我应该将所有更改提交到一个大提交中,然后以某种方式将其拆分为多个?或者也许有一种方法可以(ab)使用git stash来帮助将变更分组在一起?

2 个答案:

答案 0 :(得分:2)

没有太大改进,但您可以在第一步中开始向第一次提交添加文件,即使这最终不是您真正想要的第一次提交,因为您可以通过重新排序提交来完成一个互动的rebase。

答案 1 :(得分:0)

如果您可以稍微修改您的工作流程,那么:

  1. 您在多个文件中实现了多个“功能”,但
  2. 没有一个文件中实施的多项“功能”
  3. 然后你可以使用:

    git commit -m 'feature 1' -- foo.c bar.c
    git commit -m 'feature 2' -- bing.c bang.c
    ...
    

    这可以避免整个“大块”问题 - 但它需要您更改工作流程。

    请注意,'git way'是为每个功能创建一个分支,独立开发每个功能,将所有功能合并回来。