关于rebase和merge
rebase 应用场景:
多人在A分支同时开发时,小刘本地有三条提交,准备提交远端时发现小黄已经在远端提交了一次,和小刘本地的开发形成了分叉,类似下图
此时如果用git pull --rebase,就是把C3 C4 C5的源头挪到C6,变成这种结构
如果用merge,会把C5和C6在分支上合并成一个新的提交C7,结构如图
总结:rebase 将当前的提交复制到最新提交之后,会形成一个线性的分支树;merge会将最新的两个提交合并成一个,最后分支树是非线性的。
其他使用
本地记录回滚
- git reflog 查找到要回滚到的记录如HEAD@{0}
- git reset --hard HEAD@{0}
删掉某一条commit记录
- git log 找到要删的某一条记录的commit id
- git rebase -i commit-Id(如3aabafb2b556a8a01d56c84310300f65c1a0e47b),进入vim
- 在vim中,将不需要的行前面的pick改为drop,然后保存退出
强制覆盖本地
git reset --hard origin/分支
创建分支
1.创建关联到远端分支的同名本地分支
git checkout --track origin/分支
2.新建并切换到新分支然后关联到远端
git branch --set-upstream-to=origin/feature/分支
删掉commit的某一个文件(变为不提交
- git reset commit-ID 要删的文件(不加要删的文件就整个回滚)
- git checkout 要删的文件
- git commit --amend --no-edit
- 看情况要不要提交push review