git reset for squashing - antipattern?

时间:2014-04-22 00:32:04

标签: git

对于在git中压缩提交,我看到的通常建议是使用rebase命令。也可以交互式使用它(-i)以获得更详细的选项。

但是,我所陷入的模式(只是通过玩耍)是使用重置命令进行挤压。

通常我会这样做:

git reset origin/<branch I'm working on>

或者,如果我想要压缩任何提交:

git reset <sha>

然后,在添加和提交之后,我的本地提交被压缩为一个,我准备推送。

我是否遵循反模式?我可以遇到什么样的负面副作用?

2 个答案:

答案 0 :(得分:2)

通过这种方法你失去的主要是精细控制。

使用交互式rebase,您不必压缩到只有1次提交,您可以将它们分组为逻辑更改集,如果需要,甚至可以放弃提交。

此外,您还可以从其中一个提交中选择提交消息,而不是重新输入新提交消息,如果您的记忆与我的一样糟糕,这很重要; - )

但是,所有交互式rebase只是一个工具,你可以操纵你的本地提交历史,如果你可以做你需要的另一种方式,那么我说,为什么不。

答案 1 :(得分:0)

如果你还没有,你应该在git reset上查看这些文章:

Can you explain what "git reset" does in plain english?

http://git-scm.com/blog

他们每个人都比我更好地讨论用例和潜在的陷阱。请注意,使用reset而不指定--hard或--soft自动默认为

git reset --mixed 

要回答你的问题,我认为只要你没有突然切换到使用git reset --hard就可以了,因为在你推动之前它实际上会破坏你的工作目录。