我正在使用github repo,其中很多提交历来都是" bugfix","这次是真正的错误修复"," ok final bugfix& #34;,"最后修复了#34;。
这些是直接向主人提交的。我该如何压扁它们?
从一年前的帖子开始 - 基本上听起来这很糟糕,want to squash multiple commits in github。过去一年有什么变化吗?
答案 0 :(得分:0)
今天的答案基本相同:压缩这些提交是可能的,但是重写共享历史是Git中要强烈避免的。
想象一下,你和我每个人都有一个存储在GitHub上的存储库的副本:
A---B---C
您注意到提交B
和C
应该一起提交,因此您可以在本地副本中压缩这些提交。你现在有了
A---D
其中D
是B
和C
的组合,而GitHub和我仍有
A---B---C
此时,即使文件内容在任何地方都相同,我们的提交ID也有所不同。现在你不能在没有--force
的情况下推送到GitHub,因为GitHub的master
分支包含两个在历史记录中不再存在的提交。
如果您 使用--force
,您可以让GitHub接受您的更改,但现在我的存储库包含不再存在于上游的提交对象。我不能在不使用--force
的情况下推送到GitHub(这将使您的更改失效)或者没有进行相对时髦的合并来进行更改,可能会重新调整我的工作等等。这只有在您与我沟通时才有可能在Git之外告诉我你做了什么。
对于更多的开发人员(在Linux内核存储库上执行此操作成像!)以及同时完成的更多工作,这变得更加混乱。
真的,每当你被git push --force
诱惑时,请坐下来思考一下。你可能正在做的事情应该只是出于一个非常好的理由。
我的建议是接受你的历史有点混乱,但要努力改进未来的事情。在您推送到GitHub(或与其他开发人员共享)之前,可以在本地清除这些提交。在功能分支中工作,使用cherry-pick
,rebase
等来清除提交历史记录,如果有必要,然后推送。
答案 1 :(得分:0)
Squashing用于将大量提交合并为一个。如果你想清理最后的serval提交,请使用
检查你的上一个git日志git log
这看起来像这样
* df71a27 - (HEAD feature_x) Updated CSS for new elements (4 minutes ago)
* ba9dd9a - Added new elements to page design (15 minutes ago)
* f392171 - Added new feature X (1 day ago)
* d7322aa - (origin/feature_x) Proof of concept for feature X (3 days ago)
现在,如果你想压缩最后三次提交,那么
git rebase -i HEAD~3
通过这样做,你将进入这样的编辑
pick f392171 Added new feature X
pick ba9dd9a Added new elements to page design
pick df71a27 Updated CSS for new elements
编辑你想要像这样压缩的人
pick f392171 Added new feature X
squash ba9dd9a Added new elements to page design
squash df71a27 Updated CSS for new elements
完成后,保存并退出编辑器。 Git现在将提交压缩成一个。一切都完成了!