copy了转载 防止丢失
https://blog.csdn.net/leelit/article/details/51199859
前言
Git是一个开源的分布式版本控制系统。本文很多内容翻译自:
使用Git的第一步是下载Git,下载地址,安装时所有选项都默认选择即可。
基本工作流程
1. init
首先新建一个文件夹,进入文件夹后右击鼠标,选择git bash,敲打命令
git init
- 1
git会生成一个隐藏的.git文件夹,里面的内容用于版本控制。这样便完成了git的初始化工作,后续即可进行版本控制。
2. 三个工作区的认识
初始化完了一个git工程后,稍微来认识一下git工程。一个git工程有三个重要组成部分:
- 工作区 (Working Directory):就是我们当前能看到和编辑的文件夹。
- 缓存区 (Staging Area/Index Area):可以将工作区的变化添加到此区域。
- 仓库 (Repository):将从工作区添加到缓存区的变化永久存储起来,作为不同的版本。
Git的工作流程包括:在工作区编辑文件产生变化,添加文件变化到缓存区,保存文件的变化到仓库。
3. status add commit
status命令:查看工作区以及缓存区的状态
add命令:添加工作区的文件到缓存区
commit命令:将缓存区的文件变化存储至仓库
a. 我们先新建一个空文件git.txt,敲入命令
git status
- 1
提示的信息是:没有内容被添加到缓存区,但是工作区有新建还未进行版本控制的文件。
b. 将这个文件添加至缓存区,并再次查看状态
git add git.txt
git status
- 1
- 2
提示的信息是:缓存区有待提交的新文件
c. 将这个文件提交,-m代表提交的信息,是必须项。
git commit -m "init"
git status
- 1
- 2
此时git的状态显示: (缓存区)没有东西可以提交到仓库,工作区也没有什么变化。
diff
diff命令:比较工作区和缓存区的不同。
a. 我们首先添加三行文字到git.txt
b. 敲入命令
git diff git.txt
- 1
结果表明:工作区添加了三行文字。
c. 将其添加至缓存区并提交
git add git.txt
git commit -m "add three lines"
- 1
- 2
d. 再次在工作区编辑git.txt
e. 敲入git diff git.txt
git diff git.txt
- 1
我们之前说过diff是工作区和缓存区的比较,c步骤commit之后缓存区已经为空了,当缓存区为空时,比较的是仓库最新的commit。
f. 将其添加至缓存区并提交
git add git.txt
git commit -m "delete two lines add one line"
- 1
- 2
log
log命令就是展示之前的所有commit史
git log
- 1
小结
- git三个区域的认识:工作区、缓存区、仓库。
- 几个基本命令
版本回退
1. 认识HEAD
你当前所在的commit称为HEAD commit,大部分情况下,最近一次提交的commit就是HEAD commit,简称HEAD。
显示HEAD
git show HEAD
- 1
可以看到,HEAD就是我们最后一次的commit。
2. checkout
当你编辑工作区的文件,但是改着改着就乱了,想回退到之前的状态时,就可以使用checkout命令。
a. 编辑git.txt
b. 回退到之前的状态
git checkout HEAD git.txt
- 1
工作区的内容就会丢弃之前的编辑并且清理缓存区的内容,完全回到上一次commit的状态。
3. reset
reset命令用于将文件从缓存区撤回,以防止被commit。
a. 我们编辑git.txt,并将其add进缓存区
b. 新建一个空文件git1.txt,将其add进缓存区
c. 当我们想要commit时觉得git.txt的变化没必要在这次commit进行,于是便使用reset撤回。
git reset HEAD git.txt
- 1
这样,这一次commit便不会包含git.txt的变化了。reset只是从缓存区撤回并不会影响工作区。
d. 对git.txt重新进行add和commit操作。
git add git.txt
git commit -m "add two lines to git.txt"
- 1
- 2
4. reset SHA
reset除了3中从缓存区撤回的功能外,还可以改变HEAD的位置。
a. 首先看一下现在的log
git log
- 1
b. 将HEAD回退到之前某一个版本,这里选择”delete two lines add one line”那个版本
git reset 39f016
- 1
这样,HEAD就回到这里,但是注意,工作区的内容是不会改变的,只是单纯将HEAD拉回到原先的版本。
git status
- 1
状态图:
c. 重新add和commit
git add git.txt git1.txt
git commit -m "modified git.txt add git1.txt"
- 1
- 2
再看一下log
git log
- 1
历史轨迹已经改变~~
5. checkout SHA
相比reset SHA,checkout SHA更加彻底,他会直接将版本回退到那个版本,并且工作区的内容也直接回退到该版本。
这里的结果就是,git.txt回退到该版本状态,git1.txt也被删除了,因为该版本并无git1.txt。
小结
- 认识HEAD
- 几个基本命令