版本控制(VCS)演化:
本地版本控制系统——集中化的版本控制系统(CVCS)——分布式版本控制系统(DVCS)
Git特点
每次提交更新,Git会对当时的全部文件制作一个快照并保存这个快照的索引,而不是存储差异
近乎所有操作都是本地执行
应用哈希值的形式计算校验和,保证完整性
文件有三种状态:已提交(commited),已修改(modified),已暂存(staged)
三个工作区域:工作目录——暂存区域——Git仓库
基本的Git工作流程:
1 在工作目录中修改文件
2 暂存文件,将文件的快照放入暂存区域
3 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录
设置用户信息(global命令只需运行一次,如对不同项目使用不同名称或邮箱,可以在该目录下运行没有-global的版本)
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
基本Git指令
参考网址:http://www.jqhtml.com/8235.html
初始化本地git仓库(创建新仓库):git init
查看当前分支状态:git status
增加当前子目录下所有更改过的文件至index:git add .
提交:git commit -m 'message'
合并上一次提交:git commit-amend 'message'
将add和commit合并为一步:git commit -am 'message'
删除index中的文件:git rm xxx
显示提交日志:git log
, git log -n
(显示n行日志)
分支相关
列出所有分支:git branch
查看每个分支的最后一次提交:git branch -v
创建一个名为[name]的分支:git branch [name]
切换到[name]分支:git checkout [name]
创建并切换到[name]分支:git checkout -b [name]
将当前分支与[name]分支合并:git merge [name]
删除[name]分支:git branch -d [name]
(该指令仅用于删除已经merge了的分支)
强制删除[name]分支:git branch -D [name]
查看远程分支:git branch -r
创建远程分支(本地分支push到远程):git push origin [name]
删除远程分支:git push origin :heads/[name]
远程仓库相关指令
检出仓库:git clone git://github.com/jquery/jquery.git
检出指定分支:git clone -b BranchName http://gitlab.qiyi.domain/eggizhang/AI4AR.git
查看远程仓库:git remote -v
添加远程仓库:git remote add [name] [url]
删除远程仓库:git remote rm [name]
修改远程仓库:git remote set-url --push [name] [newUrl]
拉取远程仓库:git pull [remoteName] [localBranchName]
推送远程仓库:git push [remoteName] [localBranchName]
Git 储藏
本地有修改但不想commit,可是又要git pull的时候,可以使用“储藏”功能
git stash
将当前状态储藏
git stash list
查看现有储藏
git stash apply
应用最新的储藏
git stash apply stash@{2}
指定名字来应用储藏stash@{2}
git stash drop stash@{0}
移除储藏
git stash clear
移除所有储藏
版本(tag)操作相关指令
查看版本:git tag
创建版本:git tag [name]
删除版本:git tag -d [name]
Git 还原到之前版本
git log # 查看之前commit的id,找到想要还原的版本
git reset --hard [id] # 还原到之前的版本
Git 图形界面
gitk
是历史纪录的图形化查看器
git gui
是用来制作提交的工具
Git中LF和CRLF的操作
先指定两个非官方的概念
- 标准化 指在提交代码到git数据库(本地库) 中将文本文件中的换行符CRLF转为LF的过程
- 转换 指在检出Git数据库代码过程中将文本文件中的换行符LF转换为CRLF的过程
Git 提供了一个名为 core.autocrlf
的配置,可以自动完成标准化与转换。
git config --global core.autocrlf [true | input | false] # 全局设置
git config --local core.autocrlf [true | input | false] # 针对本项目设置
# true 自动完成标准化与转换
# input 只做标准化操作,不做转换操作
# false 提交与检出的代码都保持文件原有的换行符不变
- CRLF 与 LF 混合的文本文件不受此配置控制。
- Git 安装后默认为 false
.gitattributes 文件
在项目的根目录下可以添加一个.gitattributes 文件。它的优先级高于core.autocrlf的设置,可以覆盖core.autocrlf的。