分支

其实很简单,就是来源功能驱动开发(Feature-driven developer,简称 FDD),协作开发就得有版本管理,管理的自然就是分支了。

功能驱动开发就是:需求来了,若是功能,则建立功能分支(feature branch);若是 bug,则建立补丁分支(hotfix branch)。完成开发后,该分支就合并到相应主分支,然后删除,版本发布后记得打上 git 标签。

新建/切换分支

1.新建分支

git branch branchName
1

新建分支1 新建分支2

2.切换分支:

  • 本地有该分支,直接切换;
  • 本地没有该分支,远程有,就检出远程分支;
  • 本地和远程都没有,就报错;
git checkout branchName
1

3.切换分支:新建别切换分支,模板为当前分支

git checkout -b branchName
1

4.切换分支:新建并切换分支,模板为指定分支模板

git checkout -b branchName copyBranch
// 比如
git checkout -b dev origin/dev
1
2
3

5.切换分支:切换到上一个分支

git checkout -
1

重命名分支

git branch -m dev_1.0.0 feature_1.0.0
1

提交分支

git add .
git commit -m "提交信息"
1
2

提交分支

查看分支

1.查看本地分支,本地当前分支会有*号标记

git branch
1

2.查看远程分支

git branch -r
1

3.查看所有分支

git branch -a
1

删除分支

1.删除本地已经合并过的分支,-d--delete 缩写

git branch -d branchName
1

2.丢弃没有被合并过的分支

git branch -D branchName
1

3.强制删除,加参数 -f--force

git branch -d branchName -f
1

4.删除远程分支

  • 删除分支;
  • 推送空内容,等于删除;
git push origin -d branchName
git push origin --delete branchName
git push origin :branchName
1
2
3

贮藏分支

本地有修改,未提交的,远程也有修改的,那就本地贮藏,然后获取远程,最后在获取本地贮藏。

1.贮藏工作区代码

git stash
git stash save "贮藏名称"
1
2

2.查看贮藏列表

git stash list
1

3.使用贮藏代码

// 使用后立即删除贮藏
git stash pop

// 使用后不删除贮藏
git stash apply

// 接着再删除
git stash drop
1
2
3
4
5
6
7
8

遴选

修复提交版本复制到当前开发分支

git cherry—pick commitId
1

同步分支

删除远程仓库已经删除的分支

git pull -p
1

-p--prune,修剪的意思,

合并分支

merge 与 rebase

比如现在开发分支是这样的

merge 与 rebase

1.merge 合并:会生成一个新的节点,之前的提交分开显示

merge 合并

2.rebase 合并:不会生成新的节点,将两个分支融合成一个线性的提交,就好像你从公共分支又重新拉出来这个分支一样,即重新设置基线

rebase 合并

两者冲突如何解决

1.merge

解决冲突
git add .
git commit -m "解决冲突说明"
1
2
3

2.rebase

保持 master 分支是最新状态 git pull --rebase,然后切换到 dev_1 分支,然后 git rebase master

1.解决冲突
2.git add .
3.git rebase --continue
1
2
3

重复1、2、3,直至出现输出 applying

解决完冲突,再切换到 master 分支,然后 git merge dev_1

总结一下

  • 如果想要简洁的提交树,那就使用 rebase,从而方便 code review;
  • 如果想看到合并过程记录,那就使用 merge --no-ff;
  • 详细rebase信息可查看

选项参数说明

  • 删除 -d--delete
  • 强制 -f--force
  • 强制删除 -D--delete --force
  • 移动或重命名 -m--move
  • 强制移动或重命名 -M--move --forece
  • 远程 -r--remote
  • 所有 -a--all