Neo*_*ang 36 git merge git-merge git-rebase
我已经在SO上阅读了关于git merge和git rebase的相关问题,但我仍然无法完全理解幕后发生的事情.
这是我们的分支情况:
MASTER------------------------
\ \
\ \----Feature B---
\ \
\-----Feature A----------\---Feature A+B
Run Code Online (Sandbox Code Playgroud)
我们有2个功能分支,它们来自不同时间的master,现在我们想要组合2个分支.我们希望遵循这种first rebase then merge做法,但是当我们将功能A重新命名为功能B时,我们会遇到冲突.这是预期的,因为两个功能(和主人)在相同的区域都有变化.但奇怪的是,同样的冲突在此之后不断出现git rebase --continue.这让我们疯狂,所以我们最终中止了rebase,并使用了git merge.事实证明,冲突实际上很容易解决.
我的问题是双重的:
git rebase适合我们situtation?或者,只有少数(1或2)变化才能改变?rebase解决一个冲突,但通过比较哪个提交到什么?关于SO的相关帖子:
Enr*_*lio 48
基于这样的事实,Feature A并且Feature B似乎是共享的树枝,我说没有.
重新绑定是一种在没有合并提交(即具有两个或更多父项的提交)的情况下合并分支的方法,使其显示为线性历史记录.它最好用于合并本地分支,即仅存在于本地存储库中且尚未发布给其他人的分支.为什么?至少有两个原因:
重新绑定会更改提交ID(即SHA-1其元数据的哈希值).这意味着一旦您将重新提交的提交推送到共享分支,它们将显示为在本地存储上获取它们的任何人的全新提交,即使它们仍包含相同的更改.现在,如果有人在此期间在旧的提交之上添加了新的提交,他们将不得不移动它们.这造成了不必要的混淆.
合并公共分支时,您通常希望进行这些合并提交,以便能够跟踪提交跨分支的方式.这种信息随着变基而消失.
只是定期合并.不同之处在于,从公共父项开始,一次git rebase合并一个提交在前一个提交之上.git merge将两个提交 - 以及它们的整个更改 - 合并为一个操作,因此您只需要解决一次冲突.
正如@Jubobs在评论中指出的那样,Git确实有一个自动解决方案来解决多次发生的冲突:git rerere或" 重用记录的分辨率 ".
每次发生合并冲突时,在配置文件()中启用rerere后rerere.enabled true,Git将在合并它们之前和之后记录冲突文件的状态.下次发生同样的冲突 - 在合并两侧涉及完全相同的线的冲突- Git将自动应用之前记录的相同分辨率.它还会让您在合并输出中了解它:
CONFLICT(内容):
使用先前的分辨率合并'somefile'中的冲突已解决'somefile'.
在这里,您可以找到有关如何使用的冲突的更多详细信息git rerere.
| 归档时间: |
|
| 查看次数: |
12757 次 |
| 最近记录: |