本文介绍Git在项目中常见用法以及分支管理策略。
什么是git
-
官网及命令行下载地址
https://git-scm.com/
-
git 的 GUI 客户端
Tortoise Git、SourceTree、SmartGit、GitHub Desktop
git 基本应用
-
修改全局或单个代码库用户名、邮箱
git config --global user.name "Your Name" git config --global user.email "email@example.com"
集中库、私有库、本地库
-
本地库的一些概念
Workspace: 工作区,就是你平时存放项目代码的地方
Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
-
增加远程仓库
git remote add {origin} {url} # 添加一个远程仓库,origin为远程仓库的名字,url为远程仓库地址
-
git fetch、git pull
git fetch 为从远程仓库获取更新但不应用到当前工作区
git pull 为从远程仓库获取更新并应用到当前工作区,可能会出现合并或冲突
-
提交代码的流程
# 查看git暂存区状态 git status # 提交代码到暂存区 git add {fileName} # fileName 可以是多个,也可以是通配符,比如* # 将暂存区提交到仓库区 git commit -m {message} # git 强制提交文件必须填写提交说明 # 将仓库区的修改推送到远程仓库 git push -u origin master # 推送本地分支到远程仓库
-
git stash
stash类似于一个栈结构
git stash # 将当前工作区中对已加入仓库区的文件的修改存储到stash区(贮藏) git stash pop # 将stash区最顶层存储的改动应用到工作区
git 分支
- 查看仓库分支
git branch # 查看本地库分支
git branch -a # 查看所有分支
-
创建分支
git branch -b dev # 基于当前分支创建新的分支并切换分支 git branch dev # 基于当前分支创建新的分支 git checkout dev # 切换分支
-
合并分支
# 将dev分支合并到当前分支, # 其中 no-ff 表示如果当前分支在dev分支之前且没有过其他提交,则依然创建一个合并的提交 git merge --no-ff -m {message} dev
-
git rebase
执行rebase前分支如下
A---B---C topic / D---E---F---G master
执行rebase
git rebase master git rebase master topic
A'--B'--C' topic / D---E---F---G master
git 高级应用
- git cherry-pick 摘取(遴选)其他分支的提交到当前工作分支上
- git patch 将某几次提交做成补丁包,可以应用到其他的仓库上
- git gc - 清理不必要的文件并优化本地存储库
- git prune 清理object目录下无法到达的项目(即未被hash引用的文件)
- git tag 对某一个提交点进行打标签,方便以后快速定位到该提交点
git 的几种工作流
- Centralized Workflow
-
Feature Branch Workflow
开始一个新的特性开发
完成特性开发,合并到源分支
-
Gitflow Workflow
-
开发分支
-
(feature branch)特性分支
-
(release branch)发布分支
(hotfix branch)补丁分支
-
- Forking Workflow
参考资料
- git官网
- Pro Git
- Bitbucket
- 廖雪峰