Git
1.1 概述
Git是一个开源的分布式版本控制系统,可以快速、高效地处理任何大小的项目。
**版本控制:**跟踪和管理软件代码变更,以便将来查阅特定版本修订情况。最重要的是可以记录文件修改历史,从而让用户能够查看历史版本。
1.2 集中式版本控制 VS 分布式版本控制
集中式:有一个单一的集中管理的服务器,保存所有文件的修订版本,协同工作的人都通过客户端连接到这台服务器,取出最新文件或者提交更新
**缺点:**中央服务器的单点故障,服务器损坏,都无法区文件和更新
**分布式:**个人电脑就是一个库,在自己的库里做版本控制,再提交到远程库,又称代码托管中心(如GitHub)
**优点:**服务器断网也能开发(版本控制在本地运行);每个客户端保存的是整个完整的项目
1.3 Git工作机制
版本库👉.git
- 当我们使用git管理文件时,比如
git init
时,这个时候,会多一个.git
文件,我们把这个文件称之为版本库。 .git文件
另外一个作用就是它在创建的时候,会自动创建master分支,并且将HEAD指针指向master分支。
工作区
- 本地项目存放文件的位置
- 可以理解成图上的workspace
暂存区 (Index/Stage)
- 顾名思义就是暂时存放文件的地方,通过是通过add命令将工作区的文件添加到缓冲区
本地仓库(Repository)
- 通常情况下,我们使用commit命令可以将暂存区的文件添加到本地仓库
- 通常而言,HEAD指针指向的就是master分支
远程仓库(Remote)
- 举个例子,当我们使用GitHub托管我们项目时,它就是一个远程仓库。
- 通常我们使用clone命令将远程仓库代码拷贝下来,本地代码更新后,通过push托送给远程仓库。
1.4 Git 常用命令
配置命令
git config --list # 列出当前配置
git config --local --list # 列出repository配置
git config --global --list # 列出全局配置
git config --system --list # 列出系统配置
git config --global user.name Lowell # 设置用户签名
git config --global user.email xxx@xxx.com # 设置用户邮箱
Git首次安装必须设置用户签名,否则无法提交代码
git init # 初始化本地库
git status # 查询状态
git add <file> # 添加至暂存区
git commit -m "first commit(版本信息)" <file> # 提交到本地库
git reflog # 查看版本信息
git log # 查看版本详细信息
git reset <版本号> # 版本穿越
红色代表未追踪到文件,绿色代表Git追踪到了文件,但是还存在暂存区,依旧可以被删除
在本地库的内存中,存有你每次提交的文件的日志信息,版本穿越其实就是通过修改head所指向的分支的指针,指向你需要的版本的地址
1.5 Git分支操作
概述
Git分支是指向提交对象的可变指针。Git的默认分支名字是master。在多次提交操作之后,已经有一个指向最后那个提交对象的master分支。master分支会在每次提交时自动向前移动
优点
同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会影响其他分支。
分支命令
git branch -v # 查看本地分支
git branch -r # 查看远程分支
git branch -a # 查看本地和远程分支
git branch <name> # 创建分支
git checkout <name> # 从当前分支切换其他分支
git merge <name> # 将指定分支合并到当前分支
git branch -m <oldname> <newname> # 重命名分支
git branch -d <name> # 删除分支
git push origin -d <name> # 删除远程分支
git branch --merged # 查看有哪些分支已经合并到了当前分支
git branch --no-merged # 查看有哪些分支没有合并到当前分支
合并分支产生代码冲突的原因
- 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法决定使用哪一个,必须人为决定
(master | MERGING)正在合并中,未成功
切换分支的本质就是移动HEAD指针
Github 操作
git remote -v // 查看当前所有远程别名
git remote add <name> 远程库url // 创建远程仓库别名
git push 别名/url 分支 // 将本地库
git pull 别名/url 分支
git clone url // 将文件从远程库拉取代码,初始化本地库,创建别名
fork // 将文件从别人的远程库拉到自己的远程库