目 录
4.1 基本使用
创建分支
法一:git branch new_branch [start_point]
法二:git checkout -b new_branch #创建并切换到新分支
在某分支上创建新分支:git checkout -b new_branch old_branch
查看分支
git branch [-a] [--merged] [--no-merged]
切换分支
直接检出分支:git checkout branch
注意:分支检出其实是提交的逆操作,检出前一定要保证工作区和暂存区的清洁!
分支重命名
对于未冲突的分支名:git branch -m old_branch new_branch
对于已经存在的分支:git branch -M old_branch new_branch
删除分支
对于已经合并的分支,直接删除:git branch -d branch_name
对于未合并的分支,强制删除:git branch -D branch_name
4.2 分支的合并
直接合并
分为快进提交、合并提交两类
git merge test #将test分支合并到当前分支
冲突解决
方式一:手工解决
方式二:使用图形化工具
git config --golbal diff.tool vimdiff
git config --global difftool.prompt false
分支合并产生冲突后,使用命令 git mergetool 解决冲突
使用 xa 退出,使用 ctrl + w 切换窗口,git会依次打开下一个冲突文件
解决完冲突后,进行提交,这时会生成一个新的commit对象
压合合并
将一个分支上的所有历史合并为一个提交,然后合并到另一个分支上。
一般bug或新功能分支都可以使用这种方式合并。
git merge --squash branch_name
挑选合并
挑选一个提交,添加到当前分支末梢
git cherry-pick SHA-1
挑选多个提交,添加到当前分支末梢
git cherry-pick -n SHA-1
先在暂存区保存,可以继续挑选,最后一次性提交:git commit
4.3 分支衍合
分支衍合可以让提交历史更加清晰。
git rebase branch_name
注意事项:
衍合会更改提交历史;
永远不要衍合已经push到公共仓库的更新
衍合与合并的区别
合并顺序:按照提交时间依次合并
合并应用场景:新功能开发;bug修复
衍合顺序:将其它分支提交线性合并到本分支
衍合应用场景:pull / push冲突解决;基于主分支开发
衍合产生冲突解决:
使用 git mergetool 进入解决冲突,xa保存后,
若还有修改,使用 git rebase --continue
4.4 分支修改储藏
保存当前分支数据
在当前分支工作被打断,进度不适合提交
保存当前分支工作目录和暂存区的数据
git stash
切换到别的分支做其它工作
恢复当前分支数据
别的分支完成以后,再切换到被打断的分支
恢复工作区和暂存区的数据
git stash apply (pop) #使用pop时,丢弃stash中的记录
继续工作
储藏队列
查看储藏队列:git stash list
清空储藏队列:git stash clear
恢复某次储藏:git stash apply stash@{2}
4.5 恢复已删除分支的提交
分支删除的本质
分支这个指针已经删除,但commit对象还存在
只是脱离了commit链表而已,变成了悬空对象
具体步骤
找回提交:git fsck --lost-found
查看修改:git show SHA-1
衍合提交:git rebase SHA-1
合并提交:git merge SHA-1
注意事项
提交可以找回来,但是分支找不回来
commit删除并不是真正的删除
4.6 一个脱离了组织的提交:no branch
造成no branch的原因
与远程存在冲突,push/pull后可能会切换到此状态
其实是指在某个commit上,可以看做是一个匿名的branch
解决方法
—如果改动较小
看一下提交ID:git log
切换到要合并的分支上master:git checkout master
直接将该提交ID合并到当前分支:git merge SHA-1
—如果改动较大
先建一个新分支:git checkout -b temp SHA-1
再对该分支进行提交或合并处理:git merge temp
—如果你已经不在no branch上,切换不到no branch上了
找回丢失的commit_ish:git reflog | git fsck --lost-found
检出提交并备份到新分支上:git checkout SHA-1; git checkout -b tmp;
或者直接合并到master分支:git checkout master; git merge SHA-1
此时的SHA-1可以看做一个匿名的branch
来源:CSDN
作者:JacksonShen2020
链接:https://blog.csdn.net/qq_33669963/article/details/104107850