git学习笔记:rebase的使用

git 在合并分支时有两种策略,是 Fast-forward 和 recursive。

合并分支时有如下两种情况。

Situation One

现在在 master 分支上有两次提交。基于 c2 的提交创建了分支 feature,在分支 feature 上做了两次提交。如下图。

此时如果将 feature 合并到 master 时就会如下图。

执行的步骤是:

在 master 分支上执行 git merge feature

上面的情况的合并策略是 Fast-foward。

如果在 master 分支上执行 git merge --no-ff feature 那么将会保留分支的信息。结果如下图

即使删除了 feature 分支,分支提交信息也会保留。上面合并策略是 recursive。

Situation Two

现在在 master 分支上有两次提交。基于 c2 的提交创建了分支 feature,然后在feature做了两次提交,但是在将 feature 合并到 master 之前,已经有人先一步修改了 master。如下图。

merge

如果将 feature 合并到 master 上时,采用如下命令:

在 master 分支上执行 git merge feature

那么合并后的结果就会如下图。

其中 m1 是在将 feature 合并到 master 输入的提交信息。上面的合并策略是 recursive。

如果在 master 分支上执行 git merge --squash feature,那么 feature 上面的提交都会被压缩在 m1 提交中,f1 和 f2 将看不到了。

在 master 分支上将只能看到 m1 的提交记录。

rebase

如果执行采用 rebase ,采用如下命令:

在 feature 分支上 git rebase master

然后切换到 master 分支上 git merge feature

这样合并后的得到的结果如下图。

执行 rebase 后feature 分支变成这样了

然后将 feature 合并到 master 上

rebase 操作的特点,把分叉的提交历史整理成一条直线,但是本地的分叉提交已经内修改过了。

上面情况的合并策略是 Fast-forward 。

INSERT

猜你喜欢

转载自www.cnblogs.com/colin220/p/11023612.html