使用分支

git branch

分支代表了一条独立的开发流水线.新的提交被存放在当前分支的历史中,导致了项目历史被 fork 了一份。
git branch 命令允许你创建、列出、重命名和删除分支,
git branchgit checkoutgit merge 这两个命令通常紧密地结合在一起使用。

用法

#列出仓库中所有分支
git branch

#创建一个名为 <branch> 的分支。不会 自动切换到那个分支去。
git branch <branch>

#删除指定分支。这是一个安全的操作,Git 会阻止你删除包含未合并更改的分支。
git branch -d <branch>

#强制删除指定分支,即使包含未合并更改。如果你希望永远删除某条开发线的所有提交,你应该用这个命令。
git branch -D <branch>

#将当前分支命名为 <branch> 也就是将当前分支重命名。
git branch -m <branch>

讨论

不管 bug 是大是小——你都应该新建一个分支来封装你的修改,

例子

创建分支

分支只是指向提交的 指针 ,理解这一点很重要。当你创建一个分支是,Git 只需要创建一个新的指针——仓库不会受到任何影响

删除分支

一旦你完成了分支上的工作,准备将它并入主代码库,你可以自由地删除这个分支,而不丢失项目历史:

git checkout

#创建并查看 <new-branch>,-b 选项是一个方便的标记,告诉Git在运行 git checkout <new-branch> 之前运行 git branch <new-branch>。
git checkout -b <new-branch>

#将 <existing-branch> 作为新分支的基,而不是当前分支
git checkout -b <new-branch> <existing-branch>

分离的 HEAD

HEAD 是 Git 指向当前快照的引用

git merge

合并是 Git 将被 fork 的历史放回到一起的方式。git merge 命令允许你将 git branch 创建的多条分支合并成一个。

用法

#将指定分支并入当前分支
git merge <branch>

讨论

快速向前合并 。Git 只需要将当前分支顶端(快速向前地)移动到目标分支顶端

如果分支已经分叉了,那么就无法进行快速向前合并。当和目标分支之间的路径不是线性之时,Git 只能执行 三路合并 。三路合并使用一个专门的提交来合并两个分支的历史.

快速向前合并

下面的代码创建了一个分支,在后面添加了两个提交,然后使用快速向前合并将它并入主分支

# 开始新功能
git checkout -b new-feature master

# 编辑文件
git add <file>
git commit -m "开始新功能"

# 编辑文件
git add <file>
git commit -m "完成功能"

# 合并new-feature分支
git checkout master
git merge new-feature
git branch -d new-feature

三路合并

需要进行三路合并,因为 master 在这个功能开发时取得了新进展。这是复杂功能和多个开发者同时工作时常见的情形

# 开始新功能
git checkout -b new-feature master

# 编辑文件
git add <file>
git commit -m "开始新功能"

# 编辑文件
git add <file>
git commit -m "完成功能"

# 在master分支上开发
git checkout master

# 编辑文件
git add <file>
git commit -m "在master上添加了一些极其稳定的功能"

# 合并new-feature分支
git merge new-feature
git branch -d new-feature

# git远程删除分支后,本地git branch -a 依然能看到的解决办法。
使用命令 git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息   
此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令:   
提示你可以通过git remote prune 移除这个分支。(也就是说你可以刷新本地仓库与远程仓库的保持这些改动的同步)
这个在远程删除的分支在你本地仓库也将被删除。再通过git branch –a 来查看。  

注意,Git 现在无法进行快速向前合并,因为无法将 master 直接移动到 new-feature。

posted @ 2017-11-02 21:01  张建斌  阅读(263)  评论(0编辑  收藏  举报