我想知道,我怎么能避免在很小的代码更改中提交。例如,有时我会错过参数之间的空格或那种微小的代码格式。我问这个的原因是因为后来我必须将我的提交推送到远程存储库,我不想包含那些小的更改。
有什么想法吗?感谢
答案 0 :(得分:21)
更新:正如其他人指出的那样,如果您已经推送到远程来源并与其他开发人员共享此代码,请不要进行任何重新定位或重写任何类型的历史记录。简短的回答:这很危险且有风险!
我建议您查看rebase命令。它完全符合您的要求
这样做需要较小的提交并将它们组合成较大的提交
使用它:
git rebase -i HEAD~5
您的编辑器将弹出当前分支头部的最后5次提交,并附带一些文档。在您的情况下,您将需要使用squash
。我链接的网站解释得非常好,他们有这个例子:
pick 01d1124 Adding license
squash 6340aaa Moving license into its own file
squash ebfd367 Jekyll has become self-aware.
squash 30e0ccb Changed the tagline in the binary, too.
这将打包前3次提交,并将它们全部置于您标记为pick
的提交之下。然后,您可以修改提交消息等等。
玩得开心
答案 1 :(得分:16)
进行更改的唯一方法是使用提交。但是,如果您愿意,可以修改先前的提交以包含新的更改。如果您尚未将先前的提交推送到远程存储库,这可能是最佳解决方案。
有关修改git提交in the Git user's manual和in a blog post的良好信息。
答案 2 :(得分:3)
解决此问题的最佳方法之一是在提交之前使用git difftool在每个修改过的文件上运行xdiff或winmerge等可视化工具。这样可以轻松撤消较小的更改,并捕获您忘记所做的重大更改,但尚未准备好。我通过这种方式捕获了大量的错误。例如,当您查看代码时,很难发现丢失或额外的html标记,但在执行差异时很容易发现。
答案 3 :(得分:0)
一种选择是在一个单独的分支上工作,然后当您觉得已经做得足够多时,将该分支的所有提交压缩为一个提交,参见 this question。