作为一个Git新手,我意识到我一直在使用它,好像它是Subversion。例如总是在master上工作,在拉动更改之前不在本地提交。这通常会导致可避免的手动合并情况。使用Git的其他常见反模式有哪些?
答案 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 pop
和git stash drop
来挑选哪些值得带回来,哪些是最好的只是折腾,git stash clear
如果你只是隐藏可怕的想法。
答案 4 :(得分:5)
作为在最近开始越来越多地使用Git之前使用SVN的人,我可以说我最糟糕的习惯是git commit
,git push
,git commit
,{{1} },git push
,git commit
...
换句话说,总是在每次提交后推送,就像我还在使用SVN一样。
经过初步培训,要求放弃这种习惯,我的工作流程加载速度更快。 Git的内置优势之一是本地提交比远程提交快得多。另一个好处是,未能进行近乎持续的远程提交可能不会让你的腿稍后关闭(特别是如果它是一个小团队,即使它是一个大团队)。
对我来说,这是SVN中没有真正类比的地方(不会调用Jakub Narębski's "big ball of changes"反模式)。
答案 5 :(得分:2)
将一个大型存储库从SVN迁移到一个大型git仓库是一种明确的反模式。 git的设计方式,你不能做部分检查,甚至提交都可能很慢。最好模块化并使用每个组件的repo。至少,每个团队的回购。绝对不是每个组织的回购。