为了告别手动方式管理Linux代码,并且符合开源和免费,Linus花了两周时间自己用 C 写了一个分布式版本控制系统,这就是Git。
Git迅速成为最流行的分布式版本控制系统,尤其是 2008 年 GitHub 网站上线了,它为开源项目 免费提供Git存储 ,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSP32g6d-1605424209816)(http://oi0f7tpni.bkt.clouddn.com/u=783377470,1728660278&fm=214&gp=0.jpg)]
1. git的安装
- windows下的安装
下载地址: http://git-scm.com
windows安装过程中记得选择在cmd下使用linux命令
- mac下安装
下载HomeBrew: http://brew.sh
拷贝对应脚本到终端下安装HomeBrew 然后在终端执行brew install git命令安装git
安装xcode会默认下载git
2. 配置git用户和邮箱
$git config --global user.name "你的github用户名"
$git config --global user.email "你的github邮箱"
不配置用户名和邮箱的话无法提交,因为git不知道你是谁
查看配置
$git config --global user.name
$git config --global user.email
查看所有配置
$git config --list
3. 初始化git
- 先创建一个空目录,可以直接手动创建,也可以在终端或命令行中输入mkdir 文件夹的名字 来创建,然后进入此目录,手动进入或在终端或命令行中输入cd(change directory)文件夹的名字,进入此目录(删除文件夹使用
$ rm -rf 文件夹名字
) - windows在当前文件夹右键点击Git Bash Here打开命令行,mac在当前文件选择在此打开终端窗口,或者直接在cmd命令行或终端里输入 git init 来初始化git,告诉git当前目录归它所管理
通过ls -al 命令查看当前目录下的所有文件
4. git中的三个区
4.1 工作区
通过git add 添加到暂存区
$git add ./-a/文件名
当前文件在命令行或终端里没有加入到暂存区是红色,加入后是绿色 可以通过
$ git status
命令查看;这里说几个常用的linux命令:
$touch 文件名 //创建文件
$echo 内容 >> 1.txt //一个大于号清空 创建 并写入 两个大于号追加
$cat 文件名 //查看文件
$vi 文件名 //修改文件 i键进入编辑状态 esc退出 :wq保存并退出 :q!强制退出
4.2 暂存区
特点:过渡的作用,避免误操作,保护工作区和历史区,分支处理;
通过git commit添加到历史区
$git commit -m '注释内容'
4.3 历史区
历史区的内容只要电脑不爆炸、不手动删除.git文件,内容永远不会丢失
查看历史状态及提交版本号:
$git log / $ git log --oneline //在命令末尾添加--oneline显示记录为一行
一步提交到历史区:
$git commit -a -m'注释内容' //如果当前文件是首次提交则不支持此命令,需要逐步提交
有的时候我们希望提交时合并到上一次的提交:
$ git commit --amend
在历史区中查询关键字:
$git log --grep/--author=提交者名字
5. 不同区的代码比较
5.1 工作区和暂存区
$git diff
5.2 暂存区和历史区
$git diff --cached
5.3 工作区和历史区
$git diff 分支的名字
6. 撤销
6.1 撤销回暂存区中新加的内容(git add的内容)
$git reset HEAD 文件名
6.2 撤回文件
先从暂存区撤销,暂存区无内容,从历史区撤销
$git checkout 文件名
7. 删除
7.1 删除暂存区和工作区
删除暂存区中的内容,并且保证工作区中的内容已经不存在
$git rm 文件名 //若本地文件存在则不能删除,需要通过-f参数删除
7.2 仅删除暂存区
$git rm --cached 文件名
8. 恢复(版本回退)
8.1 版本回退(历史区→工作区)
$git reset --hard 版本号
$git reset --hard HEAD~3 // HEAD^去上一级
8.2 查看操作历史
$git log //查看当前版本之前的内容
$git reflog //查看所有操作历史
9. 分支
主要是写代码时,不会影响主代码
9.1 创建分支
$git branch 分支名字
9.2 查看分支
$git branch
9.3 进入到分支(切换分支)
$git checkout 分支名
9.4 删除分支
$git branch -D 分支名
9.5 创建并切入分支
$git checkout -b dev //创建并切入到dev分支上
9.6 合并分支
$git merge 被合并的分支名
每个人都会拥有一条分支,开发自己的代码,自己的代码开发完成后提交到自己的历史区,主分支来进行合并分支 ,注意区分主分支
9.7 合并分支时产生冲突的原因
两个人同时改变了同一个文件。git不知道谁是对的,要让自己裁决,裁决好后再次提交。只能手动合并。
10. 将本地内容推送到远程仓库
10.1 关联远程仓库
$git remote add origin(地址名) 远程仓库地址
10.2 移除关联的远程仓库
$git remote rm origin(地址名)
10.3 查看关联的远程仓库信息
查看仓库名字
$git remote
查看仓库地址
$git remote -v
10.4 推送到远程仓库
要保证即将被推送到远程的内容已经添加到历史区,即已经执行过$ git add .
&& git commit -m""
,否则无法推送到远程仓库
$git push origin master //可以选择加不加-u(upstream)参数 首次推送如果加-u则以后每次拉取和推送直接执行git pull/git push即可
如果本地和线上版本不一致,则需先进行拉取,如果拉取后有冲突,需要手动解决冲突,然后再推送
强制覆盖远程仓库内容:$ git push origin master -f
(谨慎使用此命令…后果很严重,你懂的…)