Git 学习整理
为什么用 CVS 和 Git ?
cvs 和 git 作为版本管理工具,在软件的整个流程中起到管理作用。记录每一次提交操作,方便日后对问题进行回溯。属于SCM的一种。
补充:SCM(软件配置管理)是一种标识、组织和控制修改的技术。它应用于整个软件生存期。软件配置管理是一组追踪和控制活动,它们开始于软件开发项目开始之时,结束于软件被淘汰之时。从某种角度讲,SCM是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。
Git 和 SVN的区别:集中式 和 分布式
svn 属于集中式版本管理,有一个独立的服务器管理源码,每次checkout 或者 commit 都是对服务器的操作。通常操作:checkout、add、commit。
git 属于分布式管理,第一次checkout从服务器下载源码,在本地维护一个版本库包括所有的分支,之后的操作不需要联网,例如:切换分支、commit。只有pull、push才需要联网,对于server来说,有多个copy,每个人操作的都是自己的代码库,看起来有多个代码库。通常操作:checkout、add、commit、push、pull。
Git核心概念:
分支和合并:
- git鼓励您拥有多个彼此完全独立的本地分支,分支的创建、合并、删除仅需要几秒钟。方便创建新分支做功能测试。
小而快速:
- git的所有操作都在本地执行(只有push需要服务器),commit的操作不需要等待。
- 基于Linux内核构建,使用C语言实现,能够有效的处理大型存储数据库。
分布式:
- checkout操作对整个存储库克隆。
- 每个用户都有一个主服务器的完整备份。
- 支持多种工作路程:集中式(svn)、integration(github)、独裁和中尉
数据保证:
- git使用的数据模型确保项目的每一位的加密完整性,每个文件和提交都被校验和,在检出时通过校验和检索。
缓存区(staging area):
- git具有“暂存区”,可以在完成提交之前对提交进行格式化和检查,add 操作
4个空间和5个状态:
空间:工作区、暂存区、本地仓库、远程仓库

代码提交和同步流程:

五种状态和更改操作:
**状态:**未修改、已修改、已暂存、已提交、已推送

基本操作:
git init: 初始化一个git本地仓库 git add xxx : 添加文件到git管理 git commit -m "xxx" : 提交代码 git branch :查看本地分支 git branch xxx:创建新分支 git branch -d ${url} : 删除本地分支 git checkout xxx:检出,切换分支,从A分支上拉取代码,到本地的A分支上 git pull xxx:拉取某个分支的代码,一般用在分支合并时,将B分支的代码拉取到本地,与本地的A分支的代码合并,解决冲突,然后推送到A分支上 git pull = git fetch + git merge git push xxx:推送代码到某个分支,一般推送到当前的分支上,也可以推送到其他的仓库,操作服务器 git merge(合并):在pull其他分支代码的时候使用。场景:从其他分支拉取代码,当拉取的代码有冲突时(拉取的分支修改了某个文件,本地的代码也修改了该文件)需要解决冲突问题。 git cherry-pick(定制的merge):将其他分支的commit记录合并到当前的分支。 git remote -v : 查看远程仓库 git clone ${url}: 克隆远程仓库
暂存区(staging)恢复:
从暂存区恢复:从stage拉取 git checkout a.txt 从本地仓库恢复:(HEAD 指针,表示最新的commit) 获取本地仓库的最后一次提交commit覆盖工作区 git reset —head HEAD 恢复指定文件: git checkout HEAD a.txt
暂存工作区的状态:
git stash : 保存 git stash pop:恢复 git stash list : 查看保存的列表 git stash apply : 恢复某个记录 git stash drop : 删除某个保存记录
标签:跟 commit 性质一样,区别在于 id 不同,tag名称更加易读
git tag ${tagName} 查看所有标签:git tag 对某次commit打标签:git tag ${tagName} ${commit_id} 查看标签详细信息:git show ${tagName} 删除标签: git tag -d ${tagName} 本地标签推送到远程仓库:git push origin ${tagName} 推送所有标签:git push origin —tags 删除远程标签:git ${tagName}
删除:
从工作区和版本控制中删除: git rm -f a.txt 仅从版本控制中删除: git rm -f —cached a.txt
配置本仓库账户:
git config —global user.name "xxx" git config — global user.email xxx
查看配置:
git config -l
continue…