使用Git的常见反模式是什么?

时间:2009-09-29 10:34:01

标签: git version-control anti-patterns

作为一个Git新手,我意识到我一直在使用它,好像它是Subversion。例如总是在master上工作,在拉动更改之前不在本地提交。这通常会导致可避免的手动合并情况。使用Git的其他常见反模式有哪些?

6 个答案:

答案 0 :(得分:20)

变革的大球

当您编写提交消息时,如果您不知道将更改放在单行摘要中的内容,则可能意味着您在一次提交中放置了太多独立的内容。最好将提交拆分为较小的,使用“git rebase --interactive”和/或“git add --interactive”和朋友(例如“git stash --keep-index”来测试存储的更改)。

在尝试使用“git bisect”查找错误时,每次提交单个问题会有很大帮助。

答案 1 :(得分:8)

这比git特定的更通用,但我看过许多项目都有提交消息,如“bugfix”或“fix foo”或“stuff”。不要这样做,而是使用有意义的提交消息,如“组件fiz:Fix foo bug [\ n \ nExtra info]”和“Whitespace cleanup”。当你以后不可避免地看到你的提交历史时,你会感谢你自己,并且不需要说“当我犯下'东西'时我到底意味着什么?”

答案 2 :(得分:8)

重新绑定已发布或合并的分支(然后重新发布该分支)。这样做会让每个人都讨厌你,因为它会导致糟糕的问题,因为你刚刚重写了历史记录,并要求那些从你的rebase之前的分支合并的人手动修复你的rebase引入的问题。

另请参阅http://hades.name/blog/2010/03/03/git-your-friend-not-foe-vol-4-rebasing/了解详情。

答案 3 :(得分:7)

不使用git stash

场景:您正在处理功能A.这需要大约2天时间,而且您需要大约一天的时间来完成它。你已经编写了很好的代码,但还有更多工作要做。你的老板出现并说“嘿,我现在需要功能B。应该花10秒钟。”

当然 - 写10秒钟,失去2天的工作。或者2小时试图评论并破解你过去2天写的所有代码,以使一切恢复到工作状态。

git stash是为了挽救这一天。只需在命令行中,在项目的根目录中键入git stash,所有最近的更改都将进入“存储”,这是一堆更改。现在你回到了2天前的位置,但你的工作并没有丢失。您进行10秒更改,将其签入,然后键入git stash pop以获取更改(并将其从堆栈中删除)。

很明显,如果你有一个可怕的日子,你可以多次藏匿,虽然你这样做的次数越多,当你最终git stash pop all all时,合并的可能性就越小。如果你在几个月的工作中积累了大量的藏匿资源,你可以git stash list查看它们,git stash popgit stash drop来挑选哪些值得带回来,哪些是最好的只是折腾,git stash clear如果你只是隐藏可怕的想法。

答案 4 :(得分:5)

作为在最近开始越来越多地使用Git之前使用SVN的人,我可以说我最糟糕的习惯是git commitgit pushgit commit,{{1} },git pushgit commit ...

换句话说,总是在每次提交后推送,就像我还在使用SVN一样。

经过初步培训,要求放弃这种习惯,我的工作流程加载速度更快。 Git的内置优势之一是本地提交比远程提交快得多。另一个好处是,未能进行近乎持续的远程提交可能不会让你的腿稍后关闭(特别是如果它是一个小团队,即使它是一个大团队)。

对我来说,这是SVN中没有真正类比的地方(不会调用Jakub Narębski's "big ball of changes"反模式)。

答案 5 :(得分:2)

将一个大型存储库从SVN迁移到一个大型git仓库是一种明确的反模式。 git的设计方式,你不能做部分检查,甚至提交都可能很慢。最好模块化并使用每个组件的repo。至少,每个团队的回购。绝对不是每个组织的回购。