3 分支管理

这里主要体现的git的功能的分离,这才是真正的git吧。每一个分支都是一个单独的可以分离的工作单位。每个用户可以建立不同的分支进行工作,最终提交到同一个开发分支上。一个用户可以建立不同的分支实现不同的功能,最终提交到同一个用户分支上。分支的灵活性,可以让我们很容易的实现不同分工的分割。

创建分支

1
git checkout -b dev

创建分支,并且将工作目录切换到dev的工作目录上。

1
git branch dev

使用当前版本分支创建新的分支(即添加一个分支指针)。

1
git checkout dev

将工作区切换到某一个分支指针所指的版本上。

1
git branch

会列出所有的分支目录。

分支合并

1
git merge dev

将dev分支合并到当前工作目录下的分支上(不一定是产生他的父分支)

1
git branch -d dev

用来删除一个已经无效的分支指正,但是在这个分支指针上左右的操作都会保留。

分支合并方式

1
git merge --no-ff -m "merge messge" dev --no-ff

不适用fastfoward方式进行合并,会产生一个新的版本节点。加上-m参数,是因为这种方式合并过程中会自己提交合并后的版本。

解决冲突

  • 当合并过程中出现冲突,会进入长途解决工作区,手动解决后提交,就会退出。

  • 关于一点,提交后的分支有必要继续工作吗,都行。完全可以提交后删掉重新创建一个分支,获取主干分支上集成的最新内容,然后继续工作。也可以直接在分支上合并一次主干分支,然后得到最新的内容,继续在原来的分支上进行工作。

1
git log --graph

可以查看分支合并图。

2 分支管理

  • 团队合作的分支管理组图就是你们要的方式

clipboard.png

BUG分支

  • 因为总会在自己工作的过程中出现紧急的需要更改的bug,但是现在工作区中的内容还不能提交,所以必须生成现在工作区的一个快照,等处理完紧急的bug之后,再来回复工作区的内容。
1
git stash

将当前的工作现场储存起来,等到修复完成bug之后可以再次进行更改。工作现场包括工作区和stage缓存区。然后可以清空工作区和缓存区的内容,新建bug分支进行工作。

1
git stash list

用来查看保存中的工作区。

1
git stash apply stash@{0}

恢复stash内容,但并不清楚stash列表中的内容。

1
get stash drop

用来删除stash列表中的内容。(因为已经恢复或者没有必要恢复)

1
git stash pop

可以用来弹出stash列表中的内容。

Feature分支

  • 当添加一个新的功能的时候,因为是一些实验性的代码,所以要创建一个单独的分支进行处理。

  • git checkout -b feature-vulcan

创建一个新的功能分支

1
2
3
4
5
6
7
8
9
10
11
git status

git add vulcan.py

git commit -m "add feature vulcan"

git checkout dev

git merge vulcan.py

git branch -D feature-vulcan 不合并,强制删除

3 进阶操作:cherry-pick

同步一个提交的命令:git cherry-pick -x 提交id

同步多个提交的命令:git cherry-pick -x 提交id1 提交id2 提交id3 …

  • -x 可加可不加,一般建议加,因为我们这次的提交会产生新在 commit ID,加了 -x 他会在提交信息的末尾追加一行 (cherry picked from commit …),方便以后查到这个提交是如何产生的。

  • 同步多个提交时要注意,提交较早的 commit ID 要放在前面,比如 commitIDA 比 commitIDB 提交早,那么同步的时候就要这样:git cherry-pick -x commitIDA commitIDB

如下有两个分支master和dev,从C2开始两个分支开始有不同的commits。

需要把dev的C6合并到master,只需在master分支上执行git cherry-pick C6,就会把dev分支的C6应用到master分支上并产生一个新的commitC6’。

如果要合并多个commits,比如C7和C8两个commits,可以执行git cherry-pick C7 C8,则git提交记录就会变成下面这样。

需要注意的是,新的commit SHA-1 校验和会和原来的commit SHA-1 校验和不一样。

4 进阶操作:git merge和git rebase

用merge准没错