Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 合并并推送到远程时,有没有办法忽略本地提交历史记录?_Git_Git Branch_Git Merge - Fatal编程技术网

Git 合并并推送到远程时,有没有办法忽略本地提交历史记录?

Git 合并并推送到远程时,有没有办法忽略本地提交历史记录?,git,git-branch,git-merge,Git,Git Branch,Git Merge,我们希望在git上有每个开发者的分支。换句话说,开发人员将从“开发”分支中分离出来,并创建自己的本地“功能”分支进行工作 当他们对自己的工作感到满意时,他们可以切换到devel,确保他们拥有最新的文件,然后合并到他们的“feature”分支中,并在处理任何冲突后将结果推送到原点。 但是,有一个问题-这使得提交历史非常混乱 如果执行git log--graph,则不会显示“feature”分支,这正是我们想要的。然而,开发人员所做的每一次提交现在都显示在devel分支上。那太难看了。如果有10个开

我们希望在git上有每个开发者的分支。换句话说,开发人员将从“开发”分支中分离出来,并创建自己的本地“功能”分支进行工作

当他们对自己的工作感到满意时,他们可以切换到
devel
,确保他们拥有最新的文件,然后合并到他们的“feature”分支中,并在处理任何冲突后将结果推送到原点。 但是,有一个问题-这使得提交历史非常混乱

如果执行git log--graph,则不会显示“feature”分支,这正是我们想要的。然而,开发人员所做的每一次提交现在都显示在
devel
分支上。那太难看了。如果有10个开发人员,每个开发人员在全部合并到devel之前对其功能分支进行了30次提交,那么devel现在显示了总共6个功能的180次提交的历史记录。如果历史只是显示6个合并到devel中的消息,那就更好了

有没有办法避免在合并时让历史变得“混乱”而忽略本地分支机构的历史记录?或者这只是与git的斗争太激烈了


我意识到这可能听起来很奇怪,但他们非常不喜欢所有这些对象最终都出现在远程repo上的想法

正如您的团队所观察到的,如果您养成了将初稿工作与所有初始错误、糟糕的组织以及几乎足够好的实验和修复相结合的习惯,那么您的历史将是一个可怕的沼泽

不要那样做

在当地回购协议中完成初稿工作。然后完全重写发布的第一个草稿历史,
git-rebase-i
是推荐使用的常用命令,但我发现一个
git-reset--soft
,然后是
git-add--patch
s更便于创建可查看的历史,一个适合公众使用的历史。然后,当反馈使任何不合适的地方变得明显时,完全返工,并发布/合并干净的结果

开发人员repo的本地提交系列初稿对其他人来说,除了读取编辑器撤消缓冲区历史记录之外,没有任何用处。事实上,这就是Git历史初稿的本质:一个项目范围的编辑器撤销缓冲区,并提供注释,以帮助解决下周不可避免的“我在想什么?”问题。没有人需要看到这些。它们是你桌上的笔记,工作成果,出生时就注定要扔进垃圾桶


有一个沼泽式回购协议是很好的,开发者可以在其中推动他们的WIP内容以实现可视性和协作,重要的是不要将WIP历史视为任何东西,而不管谁有副本,都是可丢弃的笔记。您管理它们的方式与管理任何已投入生产的产品的方式非常非常不同

如果您执行git日志,则不会显示“功能”分支,这正是我们想要的。然而,开发人员所做的每一次提交现在都显示在devel分支上

默认情况下,
git log
会向您显示一个简单且错误的线性历史版本。Git历史不是线性的。分支真正的分支

而不是这个

A - B - C - D - E - F - G - H [devel]
你的历史真的是这样

A ---------- E ----- H [devel]
 \          / \     /
  B - C - D    F - G
您可以通过
git log--graph
或类似的git可视化工具看到这一点

每个“功能气泡”都是来自每个分支的提交。使用真实的历史记录,您可以看到哪些提交是作为一个功能的一部分开发的。虽然这看起来很“混乱”,但这对于理解代码很重要。它与
git
一起特别有用

有没有办法避免在合并时将历史变得“混乱”而忽略本地分支机构的历史?还是这只是和git打得太多了

我的建议是习惯它,并学会如何驾驭它。例如,
git log--merges
将只显示合并提交。一个好的Git可视化工具会有很大帮助

另一个是鼓励开发人员在提交之前清理他们的分支。如果你有大量的提交是“排版修正”和“oops”以及“破坏测试”,那么这些都没有什么价值。这确保了所有提交都具有一定的后果

如果你真的想,你可以做一个“挤压合并”,
git merge--squash
。这不会保留完整的提交历史记录,而是将分支中的所有更改和所有提交消息粉碎为一个提交

虽然这会产生一个“干净”的历史记录,但它会丢失很多关于代码是如何开发的细粒度信息。例如,如果分支中有30个提交,并且您执行了
git dull
来理解某些代码,那么您将获得所有30个提交的提交消息,而无法知道哪一个应用于代码

您所看到的“凌乱”是对代码为何以这种方式编写的有价值的见解。这是黄金版,适用于任何使用代码的人。一旦砸在一起就再也找不到了

有没有办法避免在合并时将历史变得“混乱”而忽略本地分支机构的历史?还是这只是和git打得太多了

当然。简单地说,不要合并任何内容。有一个公开的回购协议,你可以在其中单独选择提交。一种方法是通过像Gerrit这样的审查系统

樱桃采摘将确保你有干净的线性历史,没有合并混乱

然而,获得单独的更改是很重要的:即,如果开发一个特性需要15次提交,那么应该记录15次提交。这很重要,原因有很多。一是多个较小的提交使得使用
git-bisect
更容易发现和隔离bug。如果一个改变了一行的小提交被认为是导致回归的原因,那么这比一个改变了三百行的提交更容易理解