我的Git笔记第四篇—分支管理

送分小仙女□ 提交于 2020-01-30 01:42:57

目  录

4.1  基本使用

4.2  分支的合并

4.3  分支衍合

4.4  分支修改储藏

4.5  恢复已删除分支的提交

4.6  一个脱离了组织的提交:no  branch


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!