Git 版本控制器
一、 Git 简介
什么是git?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git的诞生
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!
二、Git的使用
1. 创建版本库
git init
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
2. 配置当前版本库的信息
```git config --global user.name ‘xxx’` ``
git config --global user.email 'xxx@qq.com'
3. 添加文件
git add <file_name>
git add 1.html 添加1.html
git add . .添加修改文件到仓库
git add -all -all 添加所有文件
4. 提交文件
git commit
$ git commit -m '修改了冲突'
-m 提交的信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WmuhmH8B-1592489933675)(./git/git.jpg)]
4.1 查看冲突
git diff
4.2 查看跟远程仓库冲突
git diff origin/master
查看完远程仓库冲突后,没问题在拉下来合并
5 . 查看git状态
git status
6. 版本控制
git reset
版本操作
跳到当前版本 git reset --hard HEAD
跳到上一版本 git reset --hard HEAD^
跳到上上版本 git reset --hard HEAD^^
跳到指定版本 git reset --hard commit_id
看提交历史
git log
查看当前历史
git log --pretty=oneline 只输出一行
git reflog
查询所有提交历史
git reflog 以便确定要回到未来的哪个版本
7. 撤销修改
git checkout -- file_name
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file_name。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file_name,就回到了场景1,第二步按场景1操作
8 . 删除文件
2.git rm readme.txt
git commit -m “delete readme.txt"
撤销办法:
找回删除文件(版本会退):使用 git reset —hard HEAD^
9. 分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
查看自动合并冲突: git diff,然后git status查看(会有红色文件),然后(vim 红色文件)打开修改,然后 git add . -> git commit -m '备注版本' -> 执行上传 git push 别名 master:master
//执行上传的时候打开浏览器找到Github官网登录自己的账号密码
10. 远程仓库
关联远程仓库 remote
git remote add origin https://github.com/lamp402213226/php110.git
推送代码到仓库 push
git push -u origin master
(origin网址别名 可以自定义) 将代码推送到master分支上 (如果没法上传,先pull拉取一下)
git push -u origin master:master
将本地的master分支上的代码推送到服务器上的master分支上。(一般用这个去进行上传,因为明确指定要怎么上传),(如果-u不管用,去掉-u)。
git push -u origin master:master -f
-f 强制推送 一般不要使用
拉取 pull
git pull origin master
拉取服务器上的版本
获分支新的的版本 fetch
git fetch
克隆版本库 clone
git clone https://github.com/lamp402213226/test.git
克隆完以后的注意点:
1、不能正常打开laravel框架里的页面需要配置 看.gitignore这个文件,里面的内容都是不被git所管理的(不会进行克隆)
a、没有克隆vendor文件夹(因为文件太大) ,里面都是laravel框架的第三方组件,可以通过composer.json,直接 composer install(没有安装的全下载)。(尽量不要用,不安全)或者直接把.gitignore里面的内容删除掉,就全部下载了,不用composer install。
b、还有.env文件没有下载(因为.env文件里面都是密码,加密的东西),在 git Base 里面输入 cp .env.example .env,就可以正常访问了。
c、生成.env里的程序秘钥 php artisan key:generate
git fetch和git pull的区别
git fetch只会将本地库所关联的远程库的commit id更新至最新
git pull会将本地库更新至远程库的最新状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eURcg8ks-1592489933675)(/Users/admin/Downloads/20150104153019820.png)]
三、团队协作
场景应用
1. 组长
1. 在项目中初始化仓库 git init
2. 配置git的用户名 和 邮箱 git config ..
注意配置自己的邮箱 权限问题
*** 将自己的组员 添加到项目的协作者
3. 添加并且提交到本地的版本库 git commit
4. 添加本地的和远程仓库的关联 git remote
5.推送
git push -u origin master:master
-u 声明提交的用户 一般第一次提交的时候使用
2. 组员
1. 进行克隆
2. 配置版本库的用户名和邮箱
3. 添加新的分支
4. 修改完->添加到本地 git add . git commit -m '备注版本'
推送 git push origin lisi:lisi
3. 合并分支
1. 查看当前的分支 git fetch
2. 合并 git merge origin/xxxx
注意:合并要查看当前的工作区和版本库是否一致 git status
新知识:
1、如果文件已经存在可以使用:git commit -am '版本' 直接提交到本地仓库
2、git remote -v 查看git远程库信息
3、git remote show origin 查看remote地址,远程分支,还有本地分支与之相 对应关系等一系列信息
4、git clone 远程地址 -b(指定远程分支) master 克隆指定远程分支
5、git fetch origin master:make 指定远程分支拉取文件并创建本地新分支(存放新内容)
6、git merge origin/mahongcan 将远程分支内容与本地内容进行合并 (组员也可以)
7、查看远程仓库链接地址 git remote -v
8、修改git远程地址(origin) 方法有三种:
1.修改命令
git remote set-url origin [url]
例如:git remote set-url origin gitlab@gitlab.chumob.com:php/hasoffer.git
2.先删后加
git remote rm origin
git remote add origin [url]
3.直接修改config文件
9、git checkout . 清除在修改区的修改
10、git config --global push.default simple 此设置是Git命令push的默认模式为simple,当我们执行git push没有指定分支时,自动使用当前分支,而不是报错
11、git checkout -f 的作用是将在暂存区的更改文件进行强制撤销。 -f强制