Github repo壁球对主人承诺

时间:2014-06-17 18:29:43

标签: github squash git-squash

我正在使用github repo,其中很多提交历来都是" bugfix","这次是真正的错误修复"," ok final bugfix& #34;,"最后修复了#34;。

这些是直接向主人提交的。我该如何压扁它们?

从一年前的帖子开始 - 基本上听起来这很糟糕,want to squash multiple commits in github。过去一年有什么变化吗?

2 个答案:

答案 0 :(得分:0)

今天的答案基本相同:压缩这些提交是可能的,但是重写共享历史是Git中要强烈避免的。

想象一下,你和我每个人都有一个存储在GitHub上的存储库的副本:

A---B---C

您注意到提交BC应该一起提交,因此您可以在本地副本中压缩这些提交。你现在有了

A---D

其中DBC的组合,而GitHub和我仍有

A---B---C

此时,即使文件内容在任何地方都相同,我们的提交ID也有所不同。现在你不能在没有--force的情况下推送到GitHub,因为GitHub的master分支包含两个在历史记录中不再存在的提交。

如果您 使用--force,您可以让GitHub接受您的更改,但现在我的存储库包含不再存在于上游的提交对象。我不能在不使用--force的情况下推送到GitHub(这将使您的更改失效)或者没有进行相对时髦的合并来进行更改,可能会重新调整我的工作等等。这只有在您与我沟通时才有可能在Git之外告诉我你做了什么。

对于更多的开发人员(在Linux内核存储库上执行此操作成像!)以及同时完成的更多工作,这变得更加混乱。

真的,每当你被git push --force诱惑时,请坐下来思考一下。你可能正在做的事情应该只是出于一个非常好的理由。

我的建议是接受你的历史有点混乱,但要努力改进未来的事情。在您推送到GitHub(或与其他开发人员共享)之前,可以在本地清除这些提交。在功能分支中工作,使用cherry-pickrebase等来清除提交历史记录,如果有必要,然后推送。

答案 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现在将提交压缩成一个。一切都完成了!