W3C中文教程
全球最大最新的中文 Web 技术教程
HTML CSS SQL PHP COLORS MYSQL BOOTSTRAP
 

Git 分支管理



分支有什么用?

在开发中,遇到这样的情况怎么办?

网站已有支付宝在线支付功能,要添加 "微信支付"。修改了 3 个文件,wechat.php,pay.php。刚做到一半,突然有个紧急 bug: 支付宝支付后不能修改订单状态。你需要立即马上修改这个 bug, 需要修改的文件是,ali.php,pay.php。

问题是:pay.php,已经被你修改过,而且尚未完成。直接在此基础上改,肯定有问题。 把pay.php 倒回去 ? 那我之前的工作白费了。此时你肯定会想:在做 " 微信支付 " 时,能否把仓库复制一份,在此副本上修改,不影响原仓库的内容。 修改完毕后,再把副本上的修改合并过去。好的,这时你已经有了分支的思想。

前面见过的master,即是代码的主干分支,事实上,在实际的开发中,往往不会直接修改和提交到 master 分支上。 而是创建一个 dev 分支,在 dev 分支上,修改测试,没问题了,再把 dev 分支合并到 master 上。

如果有了分支,刚才的难题就好解决了,如下图:

在做 "微信支付" 时,我们创建一个 wechat 分支。把 wechat 分支 commit,此时,master 分支内容不会变,因为分支不同。

当遇到紧急 bug 时,创建一个 AliBug 分支。修复 bug 后,把 AliBug 分支合并到 master 分支上。

再次从容切换到 wechat 分支上,接着开发 "微信支付" 功能,开发完毕后,把wechat 分支合并到master 分支上。


查看分支

查看所有分支使用 git branch 命令:

$ git branch
* master # 说明只有 master 分支, 且处于 master 分支

创建分支

创建 dev 分支 git branch dev

$ git branch dev # 创建 dev 分支
$ git branch # 查看分支
dev
* master # dev 分支创建成功, 但仍处于 master 分支

切换分支

切换到 dev 分支 git checkout dev

$ git branch
* dev
master # 已切换到 dev 分支上

合并分支

当我们在 dev 上开发某功能,并测试通过后,可以把 dev 的内容合并到 master 分支。

例如:当前的 readme.txt 内容为 "w3schools.wang very good!",在 dev 分支下,添加一行 "from dev" 并提交。

$ git add readme.txt
$ git commit -m "mod in dev"

再次切换到 master,查看 readme.txt 的内容,仍为 'w3schools.wang very good!'。

合并 dev 分支,git merge dev,如下:

$ git merge dev
Updating c5364fe..412926b
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

删除分支

删除分支的命令格式为 git branch -d 分支名称

$ git branch -d dev
Deleted branch dev (was 412926b).

快速创建和切换分支

git checkout -b dev #创建 dev 分支并立即切换到 dev 分支

即起到 git branch devgit checkout dev 的共同作用。