1、安装git
https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496
- 设置名字和email地址
- $ git config --global user.name "Your Name"
- $ git config --global user.email "email@example.com"
- 查看设备名字和email地址
- $ git config --global user.name
- $ git config --global user.email
2、版本库
2.1 创建版本库
-
选择合适的地方创建空目录
mkdir
-
在路径下,直接通过
git init
命令把这个目录变成Git可以管理的仓库
pwd
可以显示当前目录
此时目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果没有显示.git目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
windows显示隐藏目录方法:查看->选项->查看->下拉找到显示隐藏文件->应用
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
2.2 把文件添加到版本库
- 使用
git add
命令将文件添加到仓库中
git add filename
- 用
git commit
命令将文件提交到仓库
git commit -m "wrote a readme file"
// -m 后的内容为本次提交的说明,方便后续从历史记录中找到改动记录
可以add多个文件后,用一次提交
注意
-
git只能跟踪文* 本文件的改动,比如TXT文件,网页,所有的程序代码等。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
-
不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题
-
Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动
-
文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
报错说明
-
输入
git add readme.txt
,得到错误:fatal: not a git repository (or any of the parent directories)
。- git命令没有在仓库目录内执行
-
输入
git add readme.txt
,得到错误fatal: pathspec 'readme.txt' did not match any files
。- 添加某个文件时,该文件必须在当前目录下存在
3、时光穿梭机
3.1 修改文件并提交
修改文件
-
直接在文件中修改
-
使用
vi filename
进行修改- 进入文件后
a
或者i
命令进入编辑模式 - 按esc键退出编辑模式,输入
:wq
保存并退出。
- 进入文件后
提交
-
git status
命令可以让我们时刻掌握仓库当前的状态,查看是否有修改过未提交的文件 -
git diff filename
可以查看具体修改了什么内容 -
确定了修改后的文件内容,后续提交和2.2一致,过程中可以随时使用
git status
查看仓库状态,看是否有文件有修改、待提交...
3.2 版本回退
git log
命令可以查看之前的操作历史记录
// 如果嫌弃直接显示太乱,可以加上--pretty=oneline
git log --pretty=oneline
- 使用
git reset
命令可以实现版本回退
git reset --hard HEAD^
// 如果想查看当前的文件内容,用 cat filename 命令
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
注意:这个命令会导致回退后的版本之后的编辑内容都丢失,例如A-B-C,回到B后,C会丢失,如果想恢复成C的版本需要找到C的版本号(commit id)
git reset --hard ID
ID只输入版本号的一部分就可以自。有以下两种方法找到C的版本号:
1、如果没有关闭当前git窗口,可以直接去前边的git log命令下看
2、关闭了窗口的话,再打开之前的内容会清屏,此时使用
git reflog
命令也可以找到之前的操作记录,进而找到C的版本号
3.3 工作区和暂存区
工作区
工作区就是在电脑里能看到的目录,也就是当前git管理的仓库里的内容
版本库--暂存区
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
2.2中讲了,将文件添加到版本库分成git add
和git commit
两个步骤:
-
用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; -
用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
简单理解就是需要提交的文件修改通过git add
全部放到暂存区,然后,通过git commit
一次性提交暂存区的所有修改。
注意:在Git中,实际跟踪并管理的是修改,而非文件。
第一次修改 -> git add -> 第二次修改 -> git commit--此时第二次修改不会被提交
使用git diff HEAD -- filename
命令可以查看此时工作区和版本库里面最新版本的区别。工作区保存的是第二次修改后的文件,而版本库里存放的是第一次修改后的结果。
3.4 撤销修改
git checkout -- file
本质是用版本库中的版本替换工作区的版本
这个命令可以丢弃工作区的修改,针对以下两种情况:
-
文件自修改后还没有被放到暂存区,也就是说没有经过
git add
命令操作文件,现在,撤销修改就回到和版本库一模一样的状态; -
文件已经添加到暂存区
git add
后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
在实际操作中还存在两种情况:
- 修改错误的文件添加到暂存区
git add
了,还没有提交git commit
,想撤回- 使用
git reset HEAD filename
命令可以把暂存区的修改撤掉,回到工作区 - 使用
git cheakout -- filename
命令撤销工作区的修改
- 使用
- 修改错误的文件已经提交了,想撤回,此时就是版本回退直接解决
git reset --hard HEAD^
3.5 删除文件
通常在文件区删除的话使用rm filename
命令,或者在文件夹中直接删除就可以,但是此时版本库中并没有删除文件,此时有两种情况:
-
文件是误删除的,此时使用
git checkout --filename
命令可以恢复,这个命令本质是用版本库中的版本替换工作区,因此只要没有commit都可以直接恢复,既可以恢复修改,也可以恢复删除。当然,如果commit了,可以使用git reset
命令恢复到任意版本。 -
文件是确实要删除的,有以下几种方式:
rm filename
->git add filename
->git commit -m""
rm filename
->git rm filename
->git commit -m""
git rm filename
->git commit -m""