有时我会对文件进行更改以方便调试,我想确保不会意外地提交这些更改。
我采取的一种方法是包含一个特殊注释,如// DEBUGGING
和一个预提交钩子,拒绝提交此类注释的尝试。问题是需要在我的存储库的所有副本中设置挂钩,并且我必须记住添加注释以及脚本查找的确切形式。
还有git update-index --assume-unchanged
,但它只适用于文件级别,有时我将调试更改与实际提交的更改混合在一起。
还有其他工具可以帮助解决这种情况吗?我开始想象一个使用第二个“临时更改”索引的设置,这样就可以根据该索引计算状态,但是仍然会从主索引中提交...但是在我对这个想法走得太远之前我想要的检查我是否重复任何现有的努力。
答案 0 :(得分:3)
这个问题是通过训练自己养成在提交时遵循某种纪律惯例的习惯来解决的。其次,在发布之前检查您的提交。
训练自己永远不要使用git commit -a
。始终使用git commit --patch
并以交互方式选择每个大块。学习如何使用s)plit和e)dit来做细粒度的变化选择。拆分可拆分的每个块,并注意您批准提交的每个更改。
当您编辑提交消息时,请将git diff --cached
的输出读入编辑缓冲区,该缓冲区仅显示您要提交的更改。在撰写评论时请参阅此材料,并在出发时将其删除。如果您在git diff --cached
中看到任何不需要的内容,则清空缓冲区,保存并退出,以中止提交。
在推送之前检查您的提交。如果您看到一些意外添加的调试打印件,请使用git reset --patch HEAD^
以交互方式暂存一组更改,以消除不需要的更改。然后git commit --amend
将这些删除组合到提交中。由于工作树保持不变,这些变化在此之后再次只是局部修改。
不要将提交视为最终可交付成果。假设提交正在进行中,并准备在发布之前通过多次迭代对它们进行优化,在此期间将大型提交拆分为较小的提交,或者将较小的提交压缩为较大的提交,重新排列其顺序,并进行其他更改。
记下要发布的新系列提交中要查找的事项的预推清单,并坚持该列表。
答案 1 :(得分:1)
在代码中放置调试注释是徒劳的,因为你(毫无疑问)也会做一些事情,比如评论东西,插入printf("foo is %d", foo)
或其他什么而不记得添加评论。
因此,您需要调整工作流程,以便不提交更改。
在工作副本干净的状态下进行调试。要实现此目的,请更改git commit
或git stash
。完成调试后,git reset --hard
会将您带回到您开始的位置。
如果您确实需要提交(例如共享您的代码),请提交分支名称中具有-debug
或类似内容的单独分支。
另一项良好做法:在推送前使用git show
审核每次提交。阅读您正在编写的代码本身就很有价值(您可以通过这种方式找到多少格式问题或思考)。它还会捕获调试内容。