[英]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 --hard
或git 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.