繁体   English   中英

Git:应该始终删除合并的分支吗?

[英]Git: should merged branch be always deleted?

我有一个与git merge工作流程有关的问题。

当我们将一个分支合并到另一个分支时,AFAIK可能会发生两件事:或者将在目标分支上创建单个提交(在非快进情况下),或者来自合并分支的提交将被应用在“分支之上”目标分支。

我对第一个案件特别感兴趣。 在第二种情况下,所有更改历史记录都将传输到目标分支,而在第一种情况下,历史记录被“压缩”为单个提交。 结果,如果删除合并的分支,则只有一个提交会合并分支中的所有更改。 另一方面,如果碰巧合并的分支源自目标分支AFAIK,则目标分支的每个重新设置基准都将需要合并分支的重新设置基准,以使其保持同步。

我的问题是:我们应该始终删除合并的分支,还是有一种方法可以保留合并的分支,并防止在每次重新建立“根”分支时都对其重新定基础?

保留合并分支的理由是,在这种情况下,我们可以深入了解该分支上所做更改的详细历史记录。

除非您在git merge调用中使用--squash选项,否则将保留合并分支的分支信息。 新创建的合并提交仅具有两个(或更多,如果是章鱼合并)父提交,而不是单个提交。 第一个父级对应于您合并到的分支,其他父级代表已合并的分支。

您可以使用gitk工具或使用

git log --pretty=oneline --abbrev-commit --graph --decorate

因此,在正常合并的情况下(无论是快进还是非快进,都是非压缩的),您可以轻松保留原始分支并继续使用它进行开发。 如果您进行了压缩,那么以后的非压缩合并可能会给后代带来很大的混乱,因此最好使用git reset --hardgit rebase ,以防万一您已经有了新的更改。

合并时,您可以选择挤压还是保持原样。

我要说的是,如果您压扁它,那么只需去一头,然后删除该分支即可,因为它显然已经完成了,所以压扁了。

如果分支完好无损(不压扁),则可以保留它并在需要时重复使用。

通常,我只会在历史没有用甚至错误的情况下才压扁提交内容。 我已经完成了开发,但是提交无法在以后修复的地方建立。 这些提交应在合并之前压缩掉。

在我工作的地方,我们将用作工作流程模型。 实施更改时,我们创建一个功能分支,并放入一个空提交来描述该分支。

git checkout -b feature1
git commit --allow-empty -m "Create branch to add a menu."

完成这项工作或达到一个良好的停止点时,我们会合并到功能分支(非快进)并删除功能分支。

git checkout develop
git merge --no-ff feature1
git branch -d feature1

分支历史记录仍保留为gitk下的“车道更改”。 这使我们可以很好地了解针对该功能所做的更改,但避免了使我们的分支机构列表混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM