我git-commit我每小时都做的一切。这很好,但最终提交了太多提交。
我希望能够清除它,而不是:
1 hour ago
2 hours ago
.
23 hours ago
24 hours ago
我只是喜欢:
1 hour ago
2 hours ago
1 day ago
7 days ago
等
目前每小时我都会这样做:
git-add .
git-commit -a
如何删除某些提交?我不想撤消任何更改。我只是不在乎有这么多要点才能恢复。我想在过去几个小时内提交很多提交,但之后只有少数提交(过去一天,一周,一个月等等或我保留的其他主要观点)。
答案 0 :(得分:29)
查看git rebase -i
命令。这可以让你“压缩”提交到更大的提交,这看起来就像你想做的那样。
答案 1 :(得分:0)
将git rebase -i
与squash
一起使用是一种简单的方法。但是,这需要用户交互。
如果您一直在这样做,则可能需要考虑自己编写一个git commit钩子(请参阅Customizing Git - Git Hooks),或者只是一个普通脚本,可以选择在需要时运行。如果我有更多时间,我会为您写出来。似乎值得花费时间来自己进行更多的自动化。
要在没有用户交互的情况下执行此操作,您需要避免使用git rebase -i
。在这种情况下,您可能正在寻找类似git reset --soft
的东西(有关更多信息,请参见Git Reset)。如果您将此操作作为预提交钩子运行,则可以检查是否最后一次提交是昨天(有关按日期列出提交的信息,请参见下文)。如果最后一次提交是昨天,那么这将告诉您是时候将该提交折叠为单个提交了。 git reset --soft
昨天完成第一次提交后,您可以重新提交所有这些更改。请记住,您必须使用--date
的{{1}}选项指定原始创作日期,以便折叠的提交保留其旧日期。
在https://git-scm.com/docs/pretty-formats中,您可以根据提交的最初创建日期创建要解析的最新提交的列表。例如,以下内容显示了如何创建最近4次提交的列表。我选择4作为示例,您可能希望选择一个数字以确保可以查看前几天的所有提交,根据您的存储库,您可能希望列出所有提交并重新组织整个历史记录。
git commmit
输出看起来像这样:
git log --format="%H %ar" | head -n 4
我不确定如果列出的是相对日期或其他日期格式,解析该列表是否会更容易。
此外,我意识到,如果您将其编写为预先提交的钩子,则必须临时6c3c5d3970c9f7de9e762f7e8300eaa37db11363 19 hours ago
2e1a8020f59be0cf43500a86033e2acde0707961 2 days ago
9bc3479a257e3f7f9dc9cbb88f3723706369b160 2 days ago
b26353b764cdd3bce0e7f0dec90ea84127c4b292 2 days ago
当前的工作目录,管理历史记录,它们才能还原您藏匿的内容。