一、git是什么
1、git是一种分布式的版本管理系统,
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
二、git和svn的对比
1、git是完整独立的分布式的版本库,不用备份代码,每个开发人员克隆到本地都是一个版本库,但是svn是集中式的,SVN只能有一个指定*版本库,如果服务器的版本库出现问题,整个代码库就完了。
2、下载速度,git下载速度远快于svn,几个G的版本库,git只需要10多分钟,svn可能要一个小时
3、git创建分支简单,可以快速创建分支,隔绝自己修改的代码,svn的版本分支,分支是一个完整的目录。且这个目录拥有完整的实际文件
4、git克隆项目到本地,包含了完整的日志,在没网络的情况下也是没有影响,但是svn需要从服务器上拉取,断网情况下将不能查看。
5、 GIT把内容按元数据方式存储,而SVN是按文件,因为git目录是处于个人机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等
6、git配套的开发平台和系统很多,例如github,gitlab
7、git学习成本高
三、git安装
ubuntu :sudo apt-get install git
就可以直接完成Git的安装,非常简单。
centos: yum install git
mac: brew install git
四、git和github区别
git是版本控制软件,github是一个网站,代码托管平台,可以在上面建立仓库,进行代码提交。
利用github创建远程仓库
从远程库克隆
三、理解工作区和暂存区
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000
在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分支master以及指向该分支的指针head
https://blog.csdn.net/faithmy509/article/details/81773138
git checkout --file 撤销工作区的修改,覆盖工作区对应的文件file,是对工作区起效果
git reset HEAD --file 撤销暂存区提交的文件,这个命令仅对暂存区有效果,不影响工作区
四、理解分支
git diff 比较的是工作区和暂存区的差别
git diff --cached 比较的是暂存区和版本库的差别
git diff HEAD 可以查看工作区和版本库的差别
首先,你在工作区创建了一个文件或者修改了一个文件
然后你有输入了git add,此时文件实际上是被添加到了暂存区(stage),也就是那个index文件
接着,你又输入git commit,这才算是正式提交。Git默认给我们创建了一个master分支(以后会详说)和一个指向master分支的HEAD指针(就是上面的HEAD文件)
git checkout -b branch-name origin/branch-name
四、版本库文件
- description文件:仅供GitWeb程序使用
- config文件:包含项目特有的配置选项
- info目录:包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore文件中的忽略模式(ignored patterns)
- hooks目录:包含客户端或服务端的钩子脚本(hook scripts)
- HEAD文件:指示目前被检出的分支
- index文件:保存暂存区信息
- objects目录:存储所有数据内容
- refs 目录:存储指向数据(分支)的提交对象的指针
五、git工作流程
六、
git config修改配置,一个存在项目目录下面,一个存在用户目录下面
vim ~/.gitconfig
vim .git/config
七、常用命令
git init
项目初始化
git config user.name 'username'. //commit保存快照的时候会记录谁提交的
git config user.email 'email'
git remote -v 查看远程仓库
git remote add origin git@github.com:HappyYears/git.git
git remote set-url origin git@github.com:HappyYears/git.git
git show xxxx. 展示某个快照的所有代码变动
git log -p 查看日志,展示具体提交记录,代码变化
git add filename
git commit -m 'test'
git rm filename
git rm --cached filename
git mv filename newfilename git自动识别重命名某个文件
git config --global alias.st status
git pull
git push
git log ----graph
- 查看日志:
git log
- 查看日志,并查看每次的修改内容:
git log -p
- 查看日志,并查看每次文件的简单修改状态:
git log --stat
- 一行显示日志:
git log --pretty=oneline
/git log --pretty='format:"%h - %an, %ar : %s'
- 查看日志范围:
- 查看最近10条日志:
git log -10
- 查看2周前:
git log --until=2week
或者指定2周的明确日期,比如:git log --until=2015-08-12
- 查看最近2周内:
git log --since=2week
或者指定2周明确日志,比如:git log --since=2015-08-12
- 只查看某个用户的提交:
git log --committer=user.name
/git log --author=user.name
- 只查看提交msg中包含某个信息的历史,比如包含'测试'两个字的:
git log --grep '测试'
- 试试这个 :
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
感觉好用就加成 alias ,方便日后用,方法:git config --global alias.aliasname 'alias-content'
- 查看最近10条日志:
git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。
git merge 则不会显示 feature,只保留单条分支记录。
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动