我们假设我在每天结束时提交代码。大多数这些提交都是垃圾,我正在保存代码,但大部分时间我都在检查不起作用的不完整代码。完成此功能后,我不希望日志中出现这些损坏的提交。我想做一个有效的最终提交,而不保留每日提交的历史记录。这可能吗?
答案 0 :(得分:4)
是。一般来说,git称之为“压缩”,并且有很多方法可以做到这一点。我建议的方法是使用交互式rebase。
如果您正在使用“上游”(您推送的存储库,或以其他方式获取您发布的提交),您通常会将其设置为您的分支的上游。然后git rebase -i
将为您设置内容。如果没有,你仍然运行git rebase -i
,你只需要再添加一个东西,即交互式rebase的提交。例如,在这种情况下,您可以使用git rebase -i HEAD~4
来处理最近四次提交。
你将要做的事实上不是变基 - 你不会将提交链从一个起始点移动到另一个起点 - 但git rebase
仍然是机制。在进行交互式rebase时,您会得到一个提交列表:
pick 1234567 commit message
pick 2345678 another commit message
Git在这个列表中打开你最喜欢的编辑器,然后你可以根据需要进行调整,然后git尝试重新应用列出的新订单中的提交,以及你对{{1行。
将一行从pick
更改为pick
会导致该提交与其之前的(line-above)提交一起折叠,此时git会在提交消息上再次打开您的编辑器,以便您可以修改新的(单个)提交的消息,该提交会将两个现有提交压缩在一起。
您也可以更改提交顺序,或省略提交。
请注意,分割提交要困难得多(尽管可以这样做),所以请确保在执行此操作之前确实要将它们压缩在一起。
(rebase进程真正做的是复制每次提交,最后一次提交是在插入任何额外的南瓜或修正后进行的。你的原始提交链仍在存储库中,并且您可以通过分支的“reflog”找到它们。请注意,因为 复制提交,您通常应该只复制和修改您尚未发布的提交。因为没有其他人拥有你未经发表的作品,他们永远不会因为看到这部作品的新旧版本而感到困惑。)
答案 1 :(得分:1)
您可以通过命令git commit --amend
来完成工作。
简单地说,像往常一样做第一次提交。
然后通过命令git add <your stuff>
打包你的东西以进行下一次提交。最后,使用上面提到的那个,而不是通常的提交。
有关详细信息,请参阅here。
答案 2 :(得分:0)
如果要合并来自结帐的所有本地提交,请执行以下操作:
//this will revert your commits but will keep your changes
git revert ...
//and then normally
git commit -m 'New feature'
git push
答案 3 :(得分:0)