我们希望在git上有每个开发人员的分支。换句话说,开发人员可以从“开发”分支中分支出来,并创建自己的本地“功能”分支来进行工作。
当他们对工作感到满意时,可以切换到devel
,确保它们具有最新文件,然后合并到其“功能”分支中,并在解决任何冲突后将结果推送到原始位置。但是,有一个问题-这使得提交历史非常混乱。
如果这样做git log --graph
,“功能”分支不会显示,这就是我们想要的。但是,开发人员现在进行的每个提交都会显示在devel
分支上。太丑了 如果有10个开发人员,并且每个开发人员在全部合并到devel中之前对他们的功能分支进行了30次提交,那么devel现在将显示180次提交的历史,共6个功能。如果历史记录仅显示6的消息合并为devel,那就更好了。
有什么方法可以避免合并时使历史变得“混乱”并在合并时忽略本地分支的历史?还是这只是与git对抗过多?
我意识到这听起来有些奇怪,但是他们非常不喜欢所有这些对象最终存储在远程仓库中的想法。
正如您的团队所观察到的那样,如果您习惯于将初稿工作与所有最初的错误,笨拙的组织以及几乎足够好的实验和修补程序合并在一起,那么您的历史将是一场可怕的沼泽恐怖。
不要那样做
在您的本地存储库¹中进行初稿工作。然后完全重写该第一稿历史记录以供发布,这git rebase -i
是为此通常推荐的命令,但是我发现git reset --soft
,使用git add --patch
s 后跟s可以更方便地创建可复查的历史记录,适合公众使用。然后,将其完全返工,以使反馈显而易见,并发布/合并干净的结果。
开发人员存储库中本地的第一个草稿提交系列对其他人来说,没有比读取他们的编辑器撤消缓冲区历史记录更多的用处。实际上,这就是Git初稿的本质:一个项目范围的编辑器撤消缓冲区,带有注释以帮助解决下周不可避免的“我在想什么?”。问题。没有其他人需要看那些。它们是您桌上的笔记,工作产品,注定是出生时的垃圾桶。
¹有一个沼泽回购是很好的,开发人员可以在其中推送WIP内容以进行可见性和协作。重要的是,无论谁拥有WIP历史记录,都不要将其视为可丢弃的便笺。您如何管理它们与如何管理已投入生产的任何事物都非常不同