git
# git
版本控制工具
我们想要一个工具帮我们管理版本
Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
svn是集中式版本管理系统
区别:
1.svn是集中式(只有一个集中管理的服务器),git是分布式(每一个终端都是一个仓库)
2.svn必须要联网,git无需联网
2
3
git优点:适合分布式开发,离线工作,速度快、灵活
git诞生小故事
Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过***手工方式***合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是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
- 安装git
- 注册github
1
2
3
4
5
- 远程仓库
//1. 配置远程仓库
git config --global user.name "你给你git起的名字"
git config --global user.email "你git验证的邮箱"
//****************************************************
//2. 创建远程仓库目录
cd 路径 //进入相应路径99
mkdir 文件夹名 //创建文件夹
pwd //显示当前路径
//****************************************************
//3. 将目录编程git仓库 **
git init //输出这个就对了--》Initialized empty Git repository in
//****************************************************
//4. 提交文件到git服务器
git add 文件名(带后缀) //将文件推送到暂存区
git add . //将全部文件添加到暂存区
git commit -m "这里写你干嘛了" //将文件提交到本地仓库中 -m "相当于注释"
git status //查看commit状态 (添加到暂存区的文件)
git diff //查看修改内容
/*****************
这里注意,如果commit后又修改了文件,需要使用diff查看修改内容,确认什么文件被修改了
然后add修改的文件,最后再commit到本地仓库
*/
git log //查看提交日志 如果条数太多,可以用q退出
git reset --hard HEAD^ //回退版本,HEAD表示当前版本,HEAD^表示上个版本,HEAD^^表示上两个版本 上N个版本 HEAD~N HEAD~100
/******************
后悔药!是有的
后悔回退了怎么办,首先,稳住,窗口别关!!!!!!!!
*/
git reflog //查看命令历史 黄色的前缀是提交操作的id号!!!!
git reset --hard id号
rm 文件名 //删除文件
git checkout //查看删除文件 检出
git checkout -- 文件名 //把本地库中的内容读取到工作区(只能回退到最后一次提交commit到版本库的版本)
git remote add origin 你项目的地址 //添加远程仓库 origin是默认名字 你可以更改为其他的
//这步操作 ,是给项目地址起一个名字 ,名字代表远程仓库地址
//方便以后提交或更新内容
//在pull push的时候,可以写地址名但是因为太长了所以给个别名
git remote -v //查看当前绑定的git地址
git remote remove 要移除的地址昵称 //移除添加的远程仓库地址
git push -u origin master //提交文件,第一次使用需要加-u 设置默认远程仓库
git push //设置默认主机后,直接git push就是提交到默认远程仓库
git clone 远程仓库地址 //克隆远程仓库代码
git pull origin master //同步远程仓库项目
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//不想被提交的文件
//创建一个.gitignore文件
touch .gitignore //将需要忽略提交的文件全称写入其中
//它本身也要写在里面 .gitignore
2
3
4
- 分支操作
主分支 master
//1.查看分支 //*代表当前分支!!!!!!
//变绿色的 是你当前使用的分支
git branch
//2.创建分支
git branch 分支名
//3.切换分支
git checkout 分支名
/*
创建并切换新分支
git checkout -b 分支名称
*/
//4.合并分支!!!!!!!!!*************
/*
切换到master分支上!!!
*/
git merge 分支名
git log --graph //可以查看合并分支图
//5.删除分支 需要你先切换到master上!!!!!
git branch -d 分支名
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
*************************解决冲突!!!!!!!!
当两个分支都提交同一块代码,合并分支的时候就会产生冲突!!!!!!
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容
需要手动修改 并重新提交!
今天干完活
//先保自己代码!!!!!!!!!!!!!!!!!!!
//1.保存在缓存区当中
git add .
//2.将你的代码 提交到 你本地的仓库中 !!!!!
git commit -m "注释"
//3.将代码同步 (同步远程仓库代码 master) !@!!!!!!!!!!!!
git pull o master //master一般来说是用户正在使用的分支
//生产分支dev 测试分支
//4.如果冲突了,解决冲突 (冲突是在同一个文件,同一个地方多人更改)
//4.1将解决冲突后的代码 重新提交到缓存区当中
git add .
//4.2重提提交到本地仓库
git commit -m "我刚才解决了XX冲突"
//5 最后将代码提交到远程仓库
git push o master //!!!!!!!!!你这个不一定是master 别给人家线上东西改了
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//第一天工作,或者接新的项目
git clone 远程仓库地址 //克隆远程仓库代码
2
git merge --------相当于 git pull