【问题标题】:How do I avoid committing small changes in git?如何避免在 git 中进行小改动?
【发布时间】:2011-03-15 01:36:33
【问题描述】:

我想知道,我怎样才能避免在代码的非常小的更改中提交。例如,有时我会错过参数之间的空格或那种微小的代码格式。我问这个的原因是因为稍后我必须将我的提交推送到远程存储库,并且我不想包含那些小的更改。

有什么想法吗?谢谢

【问题讨论】:

  • 您可能还想考虑添加一个 pre-commit 挂钩来帮助检查您的编码风格。这样,如果您尝试提交违反您设置的某些标准的代码,您可以让 git 抱怨。您可以帮助防止错误的提交!示例 pre-commit 钩子 (.git/hooks/pre-commit.sample) 在行后查找诸如尾随空格之类的内容。例如,您可以将 GNU 缩进包装在脚本中,以强制执行特定的编码样式,并将其放入您的预提交挂钩中。

标签: git commit


【解决方案1】:

更新:正如其他人指出的那样,如果您已推送到远程源并与其他开发人员共享此代码,请不要进行任何变基或任何形式的历史重写。简短的回答:这很危险!

我建议为此检查 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。挤压是要走的路。更多信息在这里:gitready.com/advanced/2009/02/10/…
  • 不管你做什么,如果你已经推送了你的更改,不要这样做:S
  • 即使存储库仅适用于我而不适用于任何其他开发人员?
  • 我刚做了,结果与遥控器冲突。我必须进行合并并解决冲突。因此,本应使历史记录变得更好的方法却使情况变得更糟。我不知道是否有任何干净的方法来重新设置遥控器。
【解决方案2】:

进行更改的唯一方法是提交。但是,如果您愿意,您可以修改以前的提交 以包含新的更改。当您尚未将之前的提交推送到远程存储库时,这可能是最佳解决方案。

关于修改 git 提交 in the Git user's manualin a blog post 有很好的信息。

【讨论】:

  • 感谢您的链接。但是,我不喜欢 [clickhere] 链接样式。这是一个用于生成描述性链接的有用书签:Copy the markdown link or edit it(pastebin 链接)
  • commit --amend 如果您没有 push 之前对远程 origin 的更改,则效果很好。如果你已经推送了,那么在amend之后,你就得push --force,风险很大。
【解决方案3】:

解决这个问题的最佳方法之一是在提交之前使用 git difftool 在每个修改过的文件上运行一个可视化工具,如 xdiff 或 winmerge。这使得撤消较小的更改变得容易,并且会捕捉到您忘记所做且尚未准备好的重大更改。我以这种方式捕获了相当多的错误。例如,在查看代码时可能很难发现缺失或多余的 html 标签,但在进行比较时很容易发现。

【讨论】:

  • 有什么理由你不会只使用git diff吗?这是它的主要目的之一......
  • @Jefromi,git diff 不允许我编辑代码和恢复部分文件。此外,我发现对完整文件内容进行并排比较更有帮助,可以帮助我发现我可能会错过的逐行差异的错误(如果有这个选项,我不会感到惊讶,但是它不能弥补缺乏编辑)
  • 啊。我认为这主要是在验证上下文中,您不可能在其中进行编辑,只需从索引中添加/重置更改。酷。
【解决方案4】:

一种选择是在单独的分支上工作,然后当您觉得自己已经完成了足够多的工作时,将分支的所有提交压缩为一个提交,请参阅this question

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多