25

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

4

6 回答 6

20

变化的大球

当您正在编写提交消息时,您不知道在单行更改摘要中放置什么,这可能意味着您在单个提交中放置了太多独立的东西。最好将提交拆分为更小的,使用“ git rebase --interactive”和/或“ git add --interactive”和朋友(如“ git stash --keep-index”来测试隐藏的更改)。

在尝试使用“ git bisect”查找错误时,每次提交都有一个问题将非常有帮助。

于 2009-09-29T18:39:58.110 回答
9

重新定位已经发布或合并的分支(然后重新发布该分支)。这样做会让每个人都讨厌你,因为这会导致可怕的问题,因为你刚刚重写了历史,并要求那些从你的 pre-rebase 分支合并的人手动修复你的 rebase 引入的问题。

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

于 2010-11-02T14:10:26.550 回答
8

这比特定于 git 的更通用,但我已经看到许多带有提交消息的项目,例如“bugfix”或“fix foo”或“stuff”。不要那样做,而是使用有意义的提交消息,例如“component fiz: Fix foo bug[\n\nExtra info]”和“Whitespace cleanup”。当您稍后不可避免地查看您的提交历史时,您会感谢自己并且不需要说“当我提交'东西'时我到底是什么意思?”

于 2010-07-14T03:07:44.317 回答
7

不使用git stash

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

当然 - 写它 10 秒,丢掉 2 天的工作。或者 2 小时试图注释掉并破解您在过去 2 天内编写的所有代码,以使所有内容恢复工作状态。

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

很明显,如果你度过了糟糕的一天,你可以多次存储,尽管显然你这样做的次数越多,当你最终 git stash pop 它们时,合并的乐趣可能就越少。如果你设法在几个月的工作中积累了很多藏匿的东西,那么你必须git stash list仔细检查它们,git stash popgit stash drop挑选哪些值得带回来,哪些最好扔掉,git stash clear如果你只藏匿糟糕的想法。

于 2009-09-29T15:46:08.787 回答
5

作为一个在最近开始越来越多地使用 Git 之前经常使用 SVN 的人,我可以说我最糟糕的习惯是做git commit, git push, git commit, git push, git commit, git push...

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

在放弃这种习惯所需的初始培训之后,我的工作流程加载速度更快。Git 的内置优点之一是本地提交比远程提交快得多。另一个好处是,不进行近乎恒定的远程提交可能不会让你以后失去信心(特别是如果它是一个小团队,即使它是一个大团队)。

对我来说,这就是 SVN 中没有真正类比的地方(这并没有引用Jakub Narębski 的“大变化球”反模式)。

于 2010-07-14T03:30:29.560 回答
3

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

于 2012-08-24T08:53:45.960 回答