配置
1 | git config --global user.name 'dreamgyf' //设置用户名 |
基本命令
1 | git init //在当前目录创建版本库 |
Rebase
合并commit记录
1
git rebase -i [startpoint] [endpoint]
其中
-i
的意思是--interactive
,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]
则指定了一个编辑区间,如果不指定[endpoint]
,则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。命令可以按如下方式:
1
git rebase -i [commit id]
或
1
git rebase -i HEAD~3
然后会出现一个vi编辑器界面,会提供给我们一个命令列表:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:丢弃该commit(缩写:d)
然后我们就可以在里面修改提交了,例如:
1
2
3pick d2cf1f9 fix: 第一次提交
s 47971f6 第二次提交
s fb28c8d 第三次提交将第二、三次的commit合并到第一次上
编辑完保存退出vi就可以完成对commit的合并了
如果保存时出现错误,输入
git rebase --edit-todo
便会回到编辑模式里,修改完后保存,git rebase --continue
合并分支
rebase
和merge
都是合并分支的操作merge
会在合并分支时产生一个新的commit记录,而rebase
会以指定分支作为基础分支,之前所做的改动全部会在指定分支的基础上提交,不会产生新的commit记录。1
2git checkout dev
git rebase master分析一下上面命令进行的操作:
首先,切换到
dev
分支上;然后,
git
会把dev
分支里面的每个commit
取消掉;其次,把之前的
commit
临时保存成patch
文件,存在.git/rebase
目录下;然后,把
dev
分支更新到最新的master
分支;最后,把上面保存的
patch
文件应用到dev
分支上;- 使用场景
- 想要干净简洁的分支树
- 在一个过时的分支上面开发的时候,执行
rebase
以同步master
分支最新变动
注意:当同一个分支有多个人使用的情况下,谨慎使用rebase,因为它改变了历史,可能会出现丢失commit的情况
- 使用场景