git介绍以及常用的命令
1.版本控制地简介
官方理解:版本控制是维护工程蓝图地标准做法,能追踪工程蓝图从诞生一直到定案地过程
个人理解:版本控制就是一种记录若干文件内容变化,以便将来查阅特定版本修订情况地系统
2.版本控制地工具
1.集中式版本控制工具: SVN、VSS、CVS
2.分布式版本控制工具: Git、 Mercurial、 Bazaar...
3.git介绍
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
4.git特点
开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的git仓库
5.Git与SVN的区别
**1.Git**
Git是分布式的,每个参与开发的人的电脑上都有一个完整的仓库,不担心硬盘出问题
在不联网的情况下,照样可以提交到本地仓库,可以查看以往所有delog,等到有网的时候,push到远程即可
非常强大的分支管理功能
Git内容的完整性要优于SVN,Git的内容存储使用的是SHA-1哈希算法,这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
**2.SVN**
较好的权限管理功能,可以精确控制每个目录的权限
使用相对git要简单一些
SVN是集中式的,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整的文件
分支功能没有git强大
速度没有git快,如果有五个分支,是吧五个分支的文件全部拷贝下来
必须连网才能commit
6.将本地仓库代码推送到远程仓库代码的方式
1.直接在代码托管平台创建远程仓库,然后将本地仓库的代码提交到远程仓库
- 如何创建远程仓库?
1.注册github(代码托管平台)
2.创建远程仓库
(点击+号,创建新仓库,仓库名称(英文) 对这个仓库的描述 勾选创建README.md 点击创建按钮)
-
如何将远程仓库克隆下来?
1.复制仓库地址
2.回到桌面,鼠标右键 点击git bash here 打开命令工具
3.在命令行工具输入 git clone 仓库地址
4.远程仓库就克隆到本地了
-
如何将本地仓库地代码推送到远程仓库?
1.把要上传的文件放到从·远程仓库克隆到本地地仓库
2.在命令行工具输入cd 拖入克隆地仓库地址 进入克隆仓库
3.将工作区(仓库)代码提交到暂存区
git add . 提交所有文件
git add "文件名" 提交单个文件
4.将暂存区地代码提交到本地仓库
git commit -m "提交地描述"
5.将本地仓库地代码推送到远程仓库 git push
2.先在本地创建一个git仓库,然后再代码托管平台在传建一个远程仓库,现在要把本地仓库项目推送到远程仓库,我们需要将本地仓库和远程仓库连接起来,然后在进行推送到远程仓库
1.先在本地创建一个文件夹
2.然后鼠标右键打开Git Bash Here
3.输入命令 cd 拖到文件夹 进入创建地文件夹
4.然后输入命令git init 创建.git文件
5.然后把需要传送地文件放入文件夹里
6.将工作区地内容提交到暂存区 git add . 全部文件
7.将暂存区地内容提交到本地仓库 git commit -m "文件说明"
8.通过git remote add 远程仓库地址别名 远程仓库地址 将本地仓库和远程仓库连接起来
9.通过git push 远程仓库地址别名 master
注意:创建远程仓库时,暂时先不要初始化/创建README.md
7.git命令
1.git init :创建一个git仓库,创建之后会在目录生成一个.git文件(隐藏)
**2.git clone:**git clone 仓库地址
3.cd 文件地址:cd 进入克隆仓库
4.git add . :提交所有文件
5.git add "文件名":提交单个文件
6.git commit -m "提交描述":将暂存代码提交到本地仓库
7.git push:将本地仓库代码推送到远程仓库
8.clear:清空当前窗口 9.git remote add 远程仓库地址别名 远程仓库地址 将本地仓库与远程仓库连接起来 10.git push 远程仓库地址别名 master 将本地仓库推送到远程仓库 11.git diff本地仓库中历史版本 文件名
8.git优势:
- 分布式,强调个体
- 公共服务器压力和数据量都不会太大
- 离线工作,每个人的本地仓库,大部分操作在本地库完成,不需要联网(SVN做不到)
- 分支操作非常快捷流畅(重点介绍)
- 可以吃后悔药, 尽可能添加数据而不是删除或修改数据(删除或修改不容易恢复,而每次添加一个版本,历史 版本都有)
- 内核一样的超大规模项目(速度和数据量)
- 速度快、灵活, 有能力高效管理类似 Linux
9.Linux命令:
1.cd 目录名称: 进入目录
2.cd ..: 返回上一级目录
3.ls: 查看当前目录的内容
4.ls -a: 查看当前目录隐藏的文件
5.mkdir 文件夹名称: 创建文件夹啊
6.touch 文件夹名称: 创建文件
7.clear: 清屏
8.rm -f 文件名: 表示删除一个文件夹
9.rmdir 文件夹名称/目录名称: 表示删除一个文件夹/目录
10.rm -rf 文件夹名称: 删除有文件的文件夹
11.cp 文件 复制出来的文件名: 表示复制文件
12.pwd: 显示工作路径
10.vim命令:
1.**i:** 在进入vim编辑器的时候,如果要输入,首先要输入i键
2.**:q!:**强制退出vim编辑器,并且不保存内容
3.**:wq:**保存退出
4.**cat:**查看文件内容
11.git命令行操作:
1.**git init:** 创建git仓库
注:.git目录中存放的是本地库相关核心配置文件,也不要随意删除与修改
2..git目录仓库说明:
1.hooks目录:脚本文件的目录
2.info目录:保存了不希望在.gitignore,文件中管理的忽略模式的全局可执行文件
3.logs目录:日志目录
4.objects目录:存储所有数据内容
5.refs目录:存储指向数据(分支)的提交对象的指针
6.config目录:文件包含了项目特有的配置选项
7.description:文件仅供GitWeb程序使用
8.HEAD:文件指向当前分支
设置签名信息:
**作用:只为区分不同开发人员的身份信息**
格式:
用户名:mengxuey
email: mengxuey@163.com
**注:这里的签名信息和登录远程库的账号和密码没有任何关系(码云、GitHub)**
项目级别/仓库级别:仅在当前目录的本地Git仓库范围内有效
git config user.name mengxuey pro
git config user.email mengxuey@163.com
签名信息保存位置:./.git/config文件中
系统用户级别:登录当前操作系统的用户范围
git config --global user.name mengxuegu_glo
git config --global user.email
mengxuey666@123.com签名信息保存位置:~/.gitconfig
级别优先:
1.就近原则:项目级别优先于系统用户级别
2.如果只有系统用户级别的签名,则采用系统用户级别的签名信息
3.二者都不存在是不允许的
12.Git基本操作 查看状态:
** 1.git status: 查看工作区、暂存区的状态**
1.1.On branch master # 默认在master(主干)分支上
1.2 No commits yet # 当前没有任何的提交
1.3 nothing to commit (create/copy files and use "git add" to track) # 没有什么需要提交的(创建/复制文件,使用“gitadd”命令可追踪,也就是用git去管理文件)
**2.vim demo.txt:** 创建文件
**3.git add 文件名:** 将文件添加到暂存区
**4.git commit -m "文件名":** 将文件添加到本地
**5.git rm --cached 文件名:** 恢复 不放到暂存区
**6.git log:** 显示提交记录
**7.git reflog:** 显示回退记录
**8.git log --pretty=oneline:** 以漂亮的格式显示 每条日志只显示一行
**9.git log --oneline:**简约格式显示
**10.git reset --hard** 局部索引值
**11.git reset --hard HEAD^:**一个^表示后退一步,n个表示后退n步
**12.git reset --hard HEAD~n:**n指定步数 表示后退n步
删除文件并恢复
rm 文件名.txt: 删除
注: 删除文件前,此文件需要已经提交过本地库 才可恢复
命令:git reset --hard <历史记录索引值>
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:无法恢复
对比文件差异
将工作区中的文件和暂存区进行比较
命令: git diff <文件名>
举例:向apply.txt文件添加了两行,使用 git diff apple.txt 查看
将工作区中的文件和本地库历史记录比较
命令: git diff <本地库中历史版本> <文件名>
注:不带文件名比较多个文件