如何在git中管理合并和重定基址?
我明白重新设置基础的目的。这对我来说很有意义。基本上,我有一个功能分支,我正在工作,我准备把它放到主分支中,我会做一个重基,将我所有的提交压缩到一个干净的分支中,这样它就可以很容易地集成到主分支中,而无需所有混乱的历史。对吧? 这就是我们一直在做的如何在git中管理合并和重定基址?,git,merge,rebase,Git,Merge,Rebase,我明白重新设置基础的目的。这对我来说很有意义。基本上,我有一个功能分支,我正在工作,我准备把它放到主分支中,我会做一个重基,将我所有的提交压缩到一个干净的分支中,这样它就可以很容易地集成到主分支中,而无需所有混乱的历史。对吧? 这就是我们一直在做的 创建要素分支 在构建功能时添加一组提交 定期将主分支合并到要素分支中(以避免痛苦的合并) 完成所有操作后,将要素分支合并到主分支中 我看到的问题是,定期将主分支合并到功能分支会在重定基址时导致问题,因为现在我的功能签入中混合了一堆主分支签入 这里的正
- git rebase-我的头^#
- git重基主控器
- git合并主机
- 吉特雷雷雷尔酒店
- git重置--硬头^
git-rere
让git自动记录你的合并决议,这样当你真的准备好合并时就可以重复使用它们。有关背景和教程,请参见。这真的很酷,因为它允许您完成合并工作,而无需在任何地方明确提交,然后在您真正准备创建合并时“神奇地”将该工作返回。因此,你可以做一些小的、希望更简单的、中间的“实践”合并,而不是在最后进行一次痛苦的合并。粗略地说:
# Enable rerere
git config --global rerere.enabled 1
# Start a feature branch
git checkout -b feature
# Hack hack hack
git commit
git commit
# Practice merge
git merge master
# ...then throw the merge commit away, the work is saved by rerere
git reset --hard HEAD^
# Hack hack hack
git commit
# Really merge to master, reusing any saved work from rerere
git checkout master
git merge feature
git branch -d feature
另请参见以获取其他教程
您还可以定期在master上重新设置主题分支的基础,然后在末尾进行合并
要处理像您当前所处的情况,一个主题分支(例如名为功能
)具有一系列来自main的合并和各种正在进行的提交,最简单的方法是执行压缩合并以生成“合并”工作树,然后创建一个新的提交(或一系列提交)上主楼。例如:
git checkout master
git merge --squash feature
git commit
这将产生一个单一的提交,该提交表示特性头部的树的状态,并合并到主文件中
当然,对于此更改,您也可以定期合并到master
,保留功能的混乱历史,并在将来更干净地工作。e、 g.简单地说
git checkout master
git merge feature
然后继续。如果您要重新设置基址(我建议您这样做),那么永远不要从master合并。rebase工作流基于这样一种理念,即主题分支由从主功能到新功能的路径组成,而不包括其他内容。当master向前移动时,您为实现新功能所做的更改也随之移动
当您最终准备将更改引入master时,您有两个主要选项:
最后一次对master重新设置基址,然后执行正常的快进合并,这基本上会将所有分支的提交一个接一个地提交到master中。这将保持更细粒度的历史记录,但是如果中间提交破坏了构建,那么您可能更愿意挤压它们。交互式重基(-i)可以帮助安排这些提交
使用merge--squash在master中进行单个提交,其中包含所有分支的更改
我相信简单的答案是:
如果出现以下情况,请使用git merge--squash
:
例如,如果您有一个功能分支,并且在工作时从另一个分支拉入该分支,那么您可以切换到功能并定期运行git merge master以在主分支中合并。或者你正在将该分支机构拉到或推到其他机构或像github这样的中央回购机构
如果出现以下情况,请使用git rebase:
如果您有一个功能分支,您没有向其他分支推送或拉送,并且您没有定期将另一个分支合并到其中,如上所述现在我更困惑了。我从来没有听说过这件事。我读了手册页,它有点道理,但我不知道如何使用它。因此,重定基址不仅用于挤压提交,而且还设置为向前移动初始原点分支?我很困惑。我在这里应该采用的实际流程是什么?特别是对于长时间运行的分支,您不需要重新访问。只需在执行过程中对master重新设置基址,这样冲突的主题分支提交就可以修复。我应该使用哪个重新设置基址命令?在过去,我尝试过git rebase master,它会在master上重放我的所有提交以及一百万个合并冲突。这需要很长时间,最后,我永远也不确定我是否正确合并了。git-Reere是一个工具,它可以帮助您管理重复合并,同时保留主题分支应该干净的“理论”。在您当前的情况下,您有一个分支,其中有许多来自main的合并,最干净的做法是
git checkout master
,然后git merge——挤压您的分支名称,这将合并回master,但丢弃合并历史记录。将来,您可以练习合并并使用git Reere来提供帮助,也可以在master上频繁地重新设置主题分支的基础。如果有人能够提供,我将对这里的实际命令感兴趣。给定一个名为Master的主分支和一个名为feature的要素分支,一个切换到要素分支并键入git-rebase-Master,然后切换到主分支并键入git-merge-fea