git基础知识汇总
什么是git
git是一种分布式版本的版本控制系统 可以清楚的记录每个文件是谁在什么时候加进来 什么时候被修改或者删除的 git帮助保存这些历史记录和证据
git也是当前业界最流行的版本控制系统
git优点?
免费开源 为了管理Linux内核程序代码,LINUX内核作者禁用10天时间就开发出来了git
速度快 文件体积小
分布式系统
git缺点
易学难精 git指令非常多 有些指令复杂但平时回到用的并不多 大概20%的指令就足以应付80%的工作。
环境安装
在window操作系统工安装git职权 先从官网下载合适的git版本 安装是直系根据提示异步点击“next”按钮即可
安装完成后置 选择Git Bash 应用程序(这个与window自带的命令提示府窗口不太一样)它本身模拟一个linux的时间很致命的软件--Bash
在窗口中输入 which git 验证git时候安装完成以及确认其版本信息
(graphic user interface,GUI)图形界面工具
SourceTree GitHub DeskTop 这两款工具 免费功能完整
终端机及常用命令介绍
就是提供使用者输入命令,与计算机进行交互的。
在windows操作系统中 按“windows+X”选择命令提示符 现象 即可进入一个类似终端机的窗口。
Git CMD 或Git Bash 程序可以使用 他可以让你比较顺利的使用git命令
在终端机环境下常用的系统命令
Windows | macOS/Linus | 说明 |
cd | cd | 切换目录 |
cd | pwd | 获取当前所在的位置 |
dir | Is | 列出当前的文件列表 |
mkdir | mkdir | 创建新的目录 |
无 | touch | 创建文件 |
copy | cp | 复制文件 |
move |
mv |
移动文件 |
del | rm | 删除文件 |
cls | clear | 清除画面上的内容 |
Git全局配置和单个仓库的用户名邮箱配置
学习git的时候, 配置了一个全局的用户名和邮箱
$ git config --global user.name “github’s Name”
$ git config --global user.email “github@xx.com”
$ git config --list
如果你公司的项目是放在自建的gitlab上面, 如果你不进行配置用户名和邮箱的话, 则会使用全局的, 这个时候是错误的, 正确的做法是针对公司的项目, 在项目根目录下进行单独配置
$ git config user.name “gitlab’s Name”
$ git config user.email “gitlab@xx.com”
$ git config --list
git config --list查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置
简化 Git 操作
git config --global alias.<alias> <command>
// 示例 把 git branch 简化为 git br
git config --global alias.br branch
新增 初始Repository
cd e: 切换至/e目录
mkdir mygit 创建mygit目录
cd mygit 切换到刚刚创建的mygit目录
git init 初始化这个目录,让git对这个目录开始进行版控创建一个.git目录 git精华都集中在这个目录中
如果这个目录不想在被Git控制
只要把.git目录移除 git就对这个目录失去控制权了 整个项目中无论那个文件或者目录删除都能找回来,但.git目录被删除了就没法再找回来了
把文件交给git管理
git简单使用
从上面的信息可以看出
git status 查看状态
git add <file> 把文件交给git管控
文件状态从Untracked变成new file 表示该文件已经被安置到暂存区(Staging Area)
如果觉得git add 有点麻烦 可以使用万用字元
git add *.html 把后缀名是.html的文件全部加到暂存区
git add --all 把全部文件都加到暂存区
--all 与 .参数有什么不一样
git add . 不会处理删除文件行为(Git2.X版本中可以 这两个参数在功能上没有区别)
执行命令时的目录位置有差异
git add . 会把当前文件夹 以及它的子目录、子子目录...中的移动全部加到暂存区,但是该目录以外的就不归它管了
git add --all 不管在项目中哪一层目录执行 效果都一样的 这个项目中的所有异动都会加入暂存区
要完成commit命令才算是完整流程
git每次commit都只会处理暂存区内容 那些还没有被加入到暂存区的文件不会被commit到存储库中。
git add 命令把文件从工作目录移至暂存区
git commit 命令把暂存区内容移至存储库
一定要一分为二吗?
先从add在commit有点繁琐 可以在commit时多加一个-a参数 缩短这个流程
git commit -a -m "update content"
查看历史方法
git log --oneline --graph 带参数精简输出
git mv oldfile newfile 重命名·
git commit --amend -m “提交名” 提交修改最后一个commit提示信息
git commit --amend --no-edit 追加文件到最近的一次commit
新增目录 无法加载git中问题
git在计算,产生对象是 是根据“文件内容”进行计算的 所有只是新增一个目录的话 git是无法处理它的
git rm 命令--cached参数的作用
git rm 用于将指定文件从git版本控制中移除(其实是在stage Area 中移除文件)
假设 a.txt 已被添加进版本控制。
在不知道rm命令之前我会这样做:
rm a.txt
git add a.txt
git commit -m 'delete a.txt'
知道了有rm 命令后,我会这样做:git rm a.txt
git commit -m 'delete a.txt'
git rm 命令相当于直接删除文件并将该操作add到暂存区,所以就相当于直接从暂存区移除指定文件。
当需要在移除版本控制中的指定文件并需要在工作区中保留该文件时,需要
带--cached 参数
有些文件不想放在git中?
在项目目录中放一个.gitignore文件,并且设置想要忽略的规则即可。
只要.gitignore文件存在。即使这个文件没有被commit或push上Git服务器,也有效果,但通常建议将这个文件commit进项目并且push上Git服务器,以便让一起开发项目的所有人可以共享相同的文件。
git add -f 文件名 无视ignore忽略规则上传
如果想套用.gitignore的规则,就必须先使用 git rm --cached命令把这些”既得利益者“ 移除Git 然后他们就被忽略了。
版本控制:
git log 查看提交历史记录 从最近到最远 可以看到3次
git reflog 查看每一次修改历史
git rest -- HEAD^ 回退版本
git checkout --test.txt 丢弃工作区的修改,即撤销修改