假设一个文件发生了一些与不同问题相关的更改。我们可以轻松地发布 git commit 并附上注释来描述每个问题的每个更改,然后推送它,并提醒自己不要再这样做。
根据更改的复杂程度,我使用此模式为每个更改提供自己的提交:
- 将完成的工作文件复制到新的最终文件。
- 将工作文件恢复到上次提交的状态。
- 将工作文件和最终文件进行区分,然后手动合并问题的各个行。
- 针对单个问题做出清晰的评论。
- 根据需要重复。
- 删除最终文件,因为它现在只是当前工作文件的副本。
除了“不要这样做”之外,还有更好的方法吗?简而言之,我在一个文件中挑选。但正如任何开发人员都知道的那样,更改可能会分散到多个文件中,有时当我们正看着需要更改的一行时,很难避免立即进行更改,而不是标记它并稍后再回来进行专门的更改/提交。谢谢。
答案1
是的,这基本上就是 Git 的“暂存区”的目的。提交实际上并不存储工作树,而只是存储您复制到暂存区的更改。您已经习惯git add
暂存单个文件以准备提交,但它还允许更细粒度的操作。例如第七章 第二节在 Git 书中。
通常的模式是用来git add -p
选择单个不同的块,并能够e进一步 dit 它们(例如,如果你在同一个块中有不相关的行)。还有一个对应git reset -p
的取消暂存如果添加的内容过多,则需要进行个别更改。
用于git diff --cached
查看暂存的内容。最后git commit
照常运行即可。
(如果您想要快捷方式,git commit -p
请一步完成所有操作。)
您还可以运行git gui
或git citool
获取图形提交界面,该界面可以使用鼠标选择单个行(右键单击以暂存)。它也内置于大多数其他图形 Git 客户端中。但是,这些通常仅在整行级别起作用 - 如果您的文件在同一行中有不相关的更改,您仍然必须使用git 添加 -p并手动编辑补丁。