1,查看差异
git diff
git diff head^ head 查看最近两个commit之间的差异 老版本在前,新版本在后
head^ 前一个版本
head^^ 前二个版本
head^^^^^^ 依次类推
有更快捷的方法 head~5 前5个版本
2,将暂存区的多个功能代码分成多次提交
git add -i 进入交互模式
输入3 进行revert,选择需要撤销的文件
输入7 进行退出
3,开发到一半的时候,切换到bugfix分支
jira 缺陷跟踪系统
stash功能,将工作区修改的的代码,全部暂存起来
git stash 保存起来
git stash list 列出保存起来的代码
git stash apply 开始恢复代码
git stash apply stash@{0} 恢复到指定的一次stash
4,修改上一次commit的备注信息
git commit --amend 只能修改最后一次
5,对历史提交进行修改
git rebase -i HEAD~5 调整最近5个commit
–在编辑状态将pick改成edit
然后就可以输入 git commit --amend 进行备注修改
修改完成之后,输入 git rebase --continue 就可以修改下一个
–在编辑状态将pick改成sqush
可以将多个commit合并,但需要多包含一个
git reset HEAD^
可以将该commit 分拆成2个commit
6,对** 本地 **刚提交的修改、暂存、提交进行撤回
git reset --hard HEAD
命令 git reset HEAD 等价于 git reset --mixed HEAD
执行完命令后,再人工调整一下
代码已经提交后,执行以下命令进行撤回:
git reset --hard HEAD^ 撤回上一个版本
git reset --hard commit标识符 撤回某一个版本
7,如何撤销远程和本地的分支合并请求
(1)git revert -m 1 HEAD
(2)git push origin master
但是这里有个坑,在此之前合并的其他分支,例如release,也需要revert一下,要不然git会犯傻的认为代码已经包含了之前的分支代码,所以需要特殊处理,再次在本地执行:git revert HEAD,git push origin master。原因:再次将master还原到指向一个新的commit,该commit的内容与上一次merge后的那个commiti一样,包含merge的内容
额外知识:
git merge --abort #合并到一半,想取消,执行这个操作
8,查找哪一个分支引发了线上bug
git bisect bad #标记这个commit有bug
git bisect start #开始二分查找
9,submodules 与 subtree
submodules 和 rebase 相对来说都是比较高阶的使用
submodules是在项目下面的子项目,
git submodules init
git submodules update --remote SUBNAME
git 后期版本升级,引入了subtree功能,官方是推荐subtree。subtree相对submodules来说更简单点
git subtree add --prefix=用来放Sub项目的相对路径 sub项目的git地址 xxx分支
实际使用中,不太推荐,会导致版本管理混乱
10, 团队拆分,迁移项目时如何简化历史提交记录
git rebase --onto commit版本1 commit版本2
11,将新版本v1.2提前到v1.1之前上线
git cherry-pick commit号#
额外知识:
git remote remove origin #移除远程链接库
git remote add origin 项目git地址 #增加远程链接库
git branch -d 分支名 #删除分支,如果有未merge的,将删除不了
git branch -D 分支名 #强制删除分支,不管有没有merge