git merge git rebase命令使用

git merge
用法一:用于从一个分支到另一个分支的合并
A–B–C----E foo
|
|----D bar

当前分支为foo分支,可使用git checkout foo切换到foo分支,使用git branch查看分支。
git merge bar // 会在当前分支(即foo分支)下生成一个新的commit节点F,从而实现分支的合并。
A–B–C----E—F foo
\ /
----D----
bar

git rebase
用法一:从两个分支分叉位置开始执行合并

A----B----C-----D master分支
|
|----E----F 某个特性分支feature1

我们假设feature1和master是一个项目的两个分支,master当然是主分支,而feature1是旁路分支。在软件开发的大部分情况中,旁路分支是要遵 从主分支的。所以说,现在feature1分支想将master分支开发的最新代码导入到feature1分支中,而且要求此动作不影响master主分支的开发,也 就是说要暗中完成。git-rebase上场了:
git checkout feature1 // 切换到feature1分支
git rebase master // 把master分支从B开始之后的C、D merge合入到feature1分支。
如果提示:
Cannot rebase: You have unstaged changes.
Please commit or stash them.
则执行 git checkout .
如果提示冲突,vi编辑冲突文件 搜索<<< 或>>>编辑消除冲突,执行git add 冲突文件路径. 执行git rebase --continue,解决完冲突后,最后执行git push -f (带上分支名)

rebase操作的合并过程,它先是会暂存当前分支上从分叉开始之后commit节点(E、F),然后回退到分叉开始的节点B。接着master分支上的所有commit(C、D)被移动到feature1分支上,最后再合并之前暂存的节点(E、F)。 最后feature1分支commit顺序为为A----B----E----F----C----D。

可以执行多次,将源分支最近修改给当前分支rebase。

用法二:将某一段commit合入到另外一个分支上

建议用git rebase 分支名1,把当前分支的修改基于分支名1 重新rebase一次。

命令格式:
git rebase [startpoint] [endpoint] --onto [branchName]
[startpoint] [endpoint] 指定了一个编辑区间(前开后闭)
使用方法:
当前分支为develop分支,将develop分支的90bc0045b~5de0da9f2的commit合入到master分支。
git rebase 90bc0045b^ 5de0da9f2 --onto master
如果提示:
Cannot rebase: You have unstaged changes.
Please commit or stash them.
则执行 git checkout .
提示冲突,则vi修改冲突,git add冲突文件路径,git rebase --continue。

git checkout master // 从develop分支切换到master分支
git reset --hard 0c72364 // 将master所指向的提交id设置为当前HEAD所指向的提交id,0c72364为执行git rebase后,master分支最后一次commit的SHA-1值(git checkout master执行后显示最上面一行的hash码)。
git push -f 把git rebase修改 提交到远端master分支(春妙 说要指定分支)。

用法三:合并多次commit为一个完整的commit
当我们在本地仓库中提交了多次,在我们把本地提交push到公共仓库中之前,为了让提交记录更简洁明了,我们希望把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。

git rebase -i [startpoint] [endpoint]
-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作
[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

git rebase -i 36224db // 从36224db往后的commit,不包含36224db
git rebase -i HEAD~3 // 最近3此提交合并为一次提交

在这里插入图片描述
将最后两次提交 pick修改为s
在这里插入图片描述
编辑完成后保存后,完成commit合并。

git rebase -i 后 多次提交 顺序可以移动,第一次提交 pick不能修改为f。用户名变更。某次提交的用户名没法修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值