一、git介绍: 最好用的一款版本控制软件
1.1、优缺点:
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
1.2、历史简介:
关键词:Linus Torvalds 、 BitKeeper
原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
-------摘自 廖雪峰官网
二、git的使用
1、下载及安装
1.1 Git2.9.2-64bit
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
工作流
2.1、新建代码库
# 在当前目录新建一个Git代码库 # 新建一个目录,将其初始化为Git代码库 [-]# 下载一个项目和它的整个代码历史 []
$ git config --# 编辑Git配置文件 -[--]# 设置提交代码时的用户信息 [--]."wtf"[--]."[email protected]"
设置别名:
git config --global alias.lol "log --oneline --decorate --graph --all"
2.3 增加/删除文件
# 添加指定文件到暂存区 [][]...# 添加指定目录到暂存区,包括子目录 []# 添加当前目录的所有文件到暂存区 .# 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交 -# 删除工作区文件,并且将这次删除放入暂存区 [][]...# 停止追踪指定文件,但该文件会保留在工作区 --[]# 改名文件,并且将这个改名放入暂存区 [-][-]2.4 代码提交
# 提交暂存区到仓库区 -[]# 提交暂存区的指定文件到仓库区 [][]...-[]# 提交工作区自上次commit之后的变化,直接到仓库区 -# 提交时显示所有diff信息 -# 使用一次新的commit,替代上一次提交 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息 ---[]# 重做上一次commit,并包括指定文件的新变化 --[][]...2.5 分支
# 列出所有本地分支 # 列出所有远程分支 -# 列出所有本地分支和远程分支 -# 新建一个分支,但依然停留在当前分支 [-]# 新建一个分支,并切换到该分支 -[]# 新建一个分支,指向指定commit [][]# 新建一个分支,与指定的远程分支建立追踪关系 --[][-]# 切换到指定分支,并更新工作区 [-]# 切换到上一个分支 -# 建立追踪关系,在现有分支与指定的远程分支之间 ---[][-]# 合并指定分支到当前分支 []# 删除分支 -[-]# 删除远程分支 --[-]-[/]2.6 标签
# 列出所有tag # 新建一个tag在当前commit []# 新建一个tag在指定commit [][]# 删除本地tag -[]# 删除远程tag ://tagName $ git show tag $ git push remote tag $ git push remote --# 新建一个分支,指向某个tag -[][]2.7 查看信息
# 显示有变更的文件 # 显示当前分支的版本历史 # 显示commit历史,以及每次commit发生变更的文件 --# 搜索提交历史,根据关键词 -[]# 显示某个commit之后的所有变动,每个commit占据一行 []--=:%# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 []--# 显示某个文件的版本历史,包括文件改名 --[][]# 显示指定文件相关的每一次diff -[]# 显示过去5次提交 - ----# 显示所有提交过的用户,按提交次数排序 -# 显示指定文件是什么人在什么时间修改过 []git diff 查看与暂存区的差异
..中间是两个点 $ git show commit $ git show ---[]# 显示某次提交时,某个文件的内容 []:[]# 显示当前分支的最近几次提交 2.8 远程同步
<><><>
<><><>
---/如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。-2.9 撤销
# 恢复暂存区的所有文件到工作区 .
# 恢复暂存区的1.txt文件到工作区 git checkout -- 1.txt
git reset HEAD^ -- soft 还原至上一个版本(工作区和暂存区都会保留,相当于未commit状态)
git reset HEAD^ --mixed 默认 还原至上一个版本(只保留工作区,相当于未add状态)
git reset HEAD^ --hard 还原至上一个版本(都不保留)