0

有时我最终会得到一个有很多更改的工作树,主要是在匆忙编码之后 - 更改如此之多,可以容纳 20 次提交,分布在 2 或 3 个分支中。为了清理工作树并很好地提交所有内容,我遵循了这个令人不快的工作流程:

  1. 用于git add -p检查工作树中的所有块,而不将任何内容保存到索引中(即对每个块回答“不,不要暂存这个”)。同时,我尝试在心理上将这些帅哥分组为提交,并记下一些我应该用我看到的帅哥构建的提交的笔记(在文本文件中)。

  2. 在我将每个大块分配给一个提交之后(在我的笔记中),然后我重新开始git add -p,并且只对进入第一个提交的大块回答“是的,暂存这个”。在检查了所有的帅哥并挑选了我想要的之后,我实际上做了提交。

  3. 只要有大块留在第 2 步重复git add -p。这意味着对于我在笔记中的每一次提交,我都会仔细检查所有内容。

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

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

4

3 回答 3

2

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

于 2013-04-27T18:45:57.590 回答
0

你违背了典型的工作流程 git add

它通常将现有路径的当前内容作为一个整体添加,但
通过一些选项,它还可以用于添加仅包含部分内容的内容
对工作树文件所做的更改已应用。

git add -p是否可以“帮助您”,但您不应该重复使用此工作流程来需要多个索引来容纳它。使用 Git,因为它应该被使用。

于 2013-04-27T16:47:46.450 回答
0

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

  1. 您在多个文件中实现了多个“功能”,但是
  2. 没有在一个文件中实现多个“功能”

那么你可以使用:

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

这避免了整个“大块头”问题——但它需要你改变你的工作流程。

请注意,“git 方式”是为每个功能创建一个分支,独立开发每个功能,将所有功能重新合并。

于 2013-04-27T17:54:28.113 回答