什么是Git
Git是拿来控制版本的,版本控制即VCS(Version Control System)
版本控制最初是linux之父拿来管理复杂的linux内核版本的
版本控制最初是linux之父拿来管理复杂的linux内核版本的
版本控制的分类:
本地版本控制:容易与备份混淆
集中的版本控制:所有用户都将代码提交到一台服务器,服务器挂了大家全傻眼
分布式版本控制:每个用户都有一个项目的完整拷贝,可以通过fetch pull与服务器同步,便于协同工作
集中的版本控制:所有用户都将代码提交到一台服务器,服务器挂了大家全傻眼
分布式版本控制:每个用户都有一个项目的完整拷贝,可以通过fetch pull与服务器同步,便于协同工作
Git文件的三种状态:
modified:修改未暂存,与未使用git一样
staged:缓存未提交,下次提交时会进入本地git数据库
committed:已提交,该文件已在git数据库中备份
staged:缓存未提交,下次提交时会进入本地git数据库
committed:已提交,该文件已在git数据库中备份
在项目中使用git后,出现三个目录:
工作目录:原来的目录
暂存目录:.git目录中用于暂存的区域,存储staged文件
本地仓库:即.git目录,committed文件存储于该目录
暂存目录:.git目录中用于暂存的区域,存储staged文件
本地仓库:即.git目录,committed文件存储于该目录
Git安装
在Ubuntu为代表的Debian体系上直接使用如下命令:
sudo apt-get install git-core
sudo apt-get install git-core
使用前的配置:
1、配置文件
/etc/gitconfig文件 通过git config --system配置
~/.gitconfig文件 通过git config --global配置
2、用户信息
git config --global user.name "leo"
git config --global user.email alexlee5670@gmail.com
3、指定编译器
git config --global core.editor vim
4、差异分析器(处理文件冲突)
git config --global merge.tool vimdiff
5、查看配置信息
git config --list
/etc/gitconfig文件 通过git config --system配置
~/.gitconfig文件 通过git config --global配置
2、用户信息
git config --global user.name "leo"
git config --global user.email alexlee5670@gmail.com
3、指定编译器
git config --global core.editor vim
4、差异分析器(处理文件冲突)
git config --global merge.tool vimdiff
5、查看配置信息
git config --list
如何获取帮助:
git help config
git help config
为项目创建git
==== 1、在工作目录中建立git仓库 ====
git init //出现.git文件即是git仓库
git init //出现.git文件即是git仓库
==== 2、从远程git仓库克隆项目 ====
git clone http://github.com/leowww24/try.git
默认存储于新创件的try文件中,后面加目录名指定存储目录
git clone http://github.com/leowww24/try.git mydir
git clone http://github.com/leowww24/try.git
默认存储于新创件的try文件中,后面加目录名指定存储目录
git clone http://github.com/leowww24/try.git mydir
==== 将工作目录中的文件加入缓存目录 ====
git add file_name
git add *.txt //加入所有.txt结尾文件,包含子目录中的
git add '*.txt' //只针对当前目录,不包含子目录
git add file_name
git add *.txt //加入所有.txt结尾文件,包含子目录中的
git add '*.txt' //只针对当前目录,不包含子目录
==== 将缓存目录中的文件加入本地git仓库 ====
git commit -m 'initial version' //-m ' ' 加入简单说明
直接提交:
git commit //会进入指定的文本编辑器,要求增加说明
跳过缓存目录直接提交到git仓库,前提是之前通过add加入了缓存目录
git commit -a -m '2ed version'
git commit -m 'initial version' //-m ' ' 加入简单说明
直接提交:
git commit //会进入指定的文本编辑器,要求增加说明
跳过缓存目录直接提交到git仓库,前提是之前通过add加入了缓存目录
git commit -a -m '2ed version'
==== 查看提交历史 ====
git log
git -p -2 //显示最近两次提交历史,-p表示显示文件差异
git log
git -p -2 //显示最近两次提交历史,-p表示显示文件差异
修改最后一次提交
git commit -m 'initial commit'
git add forgotten_file //修改最后一次提交,增加内容
git commit --amend //进入文本编辑器修改注释内容
git commit -m 'initial commit'
git add forgotten_file //修改最后一次提交,增加内容
git commit --amend //进入文本编辑器修改注释内容
==== 检查文件状态 ====
git status
git status
通过创建.gitignore文件指定忽略文件,避免git管理不必要的文件
#注释 指定被git忽略的文件
*.a
!lib.a #不忽略lib.a
#注释 指定被git忽略的文件
*.a
!lib.a #不忽略lib.a
==== 查看工作目录较缓存目录中文件更新的部分 ====
git diff
git diff
查看缓存目录较git仓库中文件更新的部分
git diff --staged 或(--cashed)
git diff HEAD //使用HEAD指针查看最近一次提交后的变化
git diff --staged 或(--cashed)
git diff HEAD //使用HEAD指针查看最近一次提交后的变化
从跟踪目录移除文件,被移除的文件将在工作目录中,不被git管理
git rm file_name
git rm '*.txt' //移除当前目录下所有.txt结尾文件
git rm file_name
git rm '*.txt' //移除当前目录下所有.txt结尾文件
取消暂存的文件,add的逆向操作
git reset file_name
git reset file_name
取消对文件的修改,从缓存目录还原到工作目录
git checkout -- file_name //注意: --与文件名中间有个空格
git checkout -- file_name //注意: --与文件名中间有个空格
关于远程库
==== 查看当前远程库 ====
git remote //默认远程目录名为origin
git remote -v //显示对应的远程地址
git remote //默认远程目录名为origin
git remote -v //显示对应的远程地址
==== 添加远程仓库,同时指定目录简称 ====
git remote add [shortname] [url]
git remote add [shortname] [url]
==== 从远程库中抓取数据 ====
git fetch [remote-name] //不会自动merge
git pull origin master //相当与fetch之后再merge
git fetch [remote-name] //不会自动merge
git pull origin master //相当与fetch之后再merge
==== 推送数据到远程仓库 ====
git push [remote-name] [branch-name]
git push origin master //远程仓库名称默认origin 本地仓库名称默认为master
git push -u origin master //-u使git记住当前参数,下次可以直接git push
git push [remote-name] [branch-name]
git push origin master //远程仓库名称默认origin 本地仓库名称默认为master
git push -u origin master //-u使git记住当前参数,下次可以直接git push
==== 查看远程仓库信息 ====
git remote show origin
git remote show origin
==== 远程仓库从命名与删除 ====
git remote rename origin new_name
git remote rm origin
git remote rename origin new_name
git remote rm origin
==== 查看本地仓库与远程仓库的区别 ====
git diff [local_branch_name] [remote_branch_name]
git diff master origin/master
git diff [local_branch_name] [remote_branch_name]
git diff master origin/master
分支的概念
分支用于从开发主线分离出来,不影响主线同时继续工作
==== 查看分支: ====
git branch //有一个Head指针指向的是当前工作的分支
git branck -v //查看各分支最后一次提交的注释信息
git branch //有一个Head指针指向的是当前工作的分支
git branck -v //查看各分支最后一次提交的注释信息
==== 创建分支: ====
git branch new_branck_name
git branch new_branck_name
==== 切换分支: ====
git checkout branch_name
git checkout branch_name
创建并切换分支(等同于上面两条命令):
git checkout -b new_branck_name
git checkout -b new_branck_name
==== 合并分支: ====
git merge other_branch_name //将当前分支与另一个分支合并
git merge other_branch_name //将当前分支与另一个分支合并
==== 移除分支: ====
git branch -d branch_name //使用-d 移除无用的分支
git branch -d branch_name //使用-d 移除无用的分支
原文:
https://git-scm.com/book/zh
推荐教程Code School:
https://try.github.io/levels/1/challenges/1