Git的基础使用
回想起初次使用git是在大二下学期上课的时候,老师给我们推荐的版本管理系统…一直到现在还是处于非常懵*的状态
git的初始化
git config --global user.name "nameString"
git config --global user.email "emailString"
使用 : git config --list
就可以看到刚刚设置的用户名和邮箱名了
那么git记录的是什么呢?
答案: 将每个版本独立保存(空间换时间),压倒性其他版本关系系统
这里开始我们要有一个概念:
三棵树
分别是:
那么git的工作流程是怎么样的呢?!
-
在工作目录中添加,修改文件
-
将需要进行版本管理的文件放入暂存区中
-
将暂存区的文件提交到git仓库上
这就是Git的主要的三部曲
演示
-
新建一个文件夹(第一棵树)
新建一个GitProject的文件夹
mkdir GitProject
接着往里面增加一些文件随便都可以。
-
添加文件到暂存区(第二棵树)
添加单一的文件,也可以添加多个文件
git add <file01> <file02> ....
一次性添加所有文件
git add . / git add *
成功添加到暂存区之后是没有提示的。
所以说没有提示就是最好的提示
-
提交到git仓库
提交命令
git commit -m '这里写提交的日志'
提交之后会有相应的提示信息。
查看提交过的记录
git log
这里后面可以带部分参数
–decorate 显示提交的所有引用(包括分支的) –all 显示所有分支 –oneline 一行显示一个快照(缩略显示) –graph 图形化的显示分支情况 -
Git 管理文件的三种状态
- 已修改(modified)
- 已暂存(staged)
- 已提交(commited)
-
查看git当前的状态
git status
-
撤销文件/恢复文件
reset命令
reset命令会更改
head
指针的指向-
将最近一次提交到git仓库的文件恢复到暂存区中
git reset HEAD <file>
这里默认是–mixed的模式,这里没有更改
head
指针的指向还是指向最新的快照 -
将最近一次提交到git仓库的文件恢复到暂存区中并且更改
head
指针的指向git reset HEAD~ <file>
这里同样也是–miexed的模式,但是这里更改了
head
的指向,指向了上一个快照。对比上一条命令
git reset HEAD <file>
HEAD后面多了一个~ , 那么也就是说。想要更改
head
指针的指向。可以对
head
进行一些操作更改
head
指针,指向上上个快照git reset HEAD~~ <file>
以此类推
head~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**也可以这样做 : **
git reset HEAD~(1,2,3,4,num)
将
head
指针指向上(1,2,3,4,num)个快照reset命令的选项
git reset --mixed HEAD~
这是默认的(影响两棵树)
-
移动
HEAD
的指向,将其指向上一个快照 -
将
HEAD
移动后指向的快照,回滚到暂存区(影响仓库区和暂存区)
git reset --soft HEAD~
-
移动
HEAD
的指向,将其指向上一个快照(这里只影响仓库区域,不会影响暂存区)。只是单单的改变
head
指向而已 -
相当于撤回上一的**
commit
**操作
git reset --hard HEAD~
-
移动
HEAD
的指向,将其指向上一个快照 -
将
HEAD
移动后指向的快照,回滚到暂存区 -
将暂存区的文件还原到工作目录
(硬着来,直接还原指定的快照。有风险)
回滚到个别文件
git reset HEAD 版本快照 文件名
这一步
head
指针不会改变也就是说git log里的日志还是有的。
往回滚,当然也可以往前滚(只要你记住了快照ID)
git reset 版本快照的ID
注意(默认是–mixed)模式
回滚的文件放到暂存区,可以
check
命令拉回来,后面说check也可以直接使用
--hard
模式查看历史所有记录
git reflog
-
-
-
版本比较
这里个人觉得用命令进行比较,有点眼花。
所以不怎么说:
具体命令:
比较暂存区和工作区
git diff
比较两个历史快照
git diff 快照ID 快照ID
- 快照ID只需要5位上下就可以了。不用全部都输入进去
比较 当前工作目录快照 和 git仓库中的快照
git diff 快照ID
比较 当前工作目录快照 和 最新git仓库中的快照
git diff head
比较 暂存区 和 git仓库快照
git diff --cached/--staged [快照ID]
-
修改最后一次提交
执行带
--amend
选项的commit
提交命令,git就会更正最近的一次提交。此时不会产生新的快照
此时会进入到修改提交说明的界面:
- i 表示
insert
- 保存退出:
esc
后,shift+z+z
- 不希望修改的话:
q!
回车就可以了
- i 表示
-
删除文件
-
只是删除工作目录和暂存区的文件
git rm 文件名
也就是取消跟踪,下次提交时不纳入管理
-f 强制删除 —>
--force
-
删除暂存区文件,保留工作区文件
git rm --cached/--staged 文件名(*/.)
-
-
重命名
git mv 旧文件名 新文件名
如果直接更改工作区的文件名,暂存区就会显示检测到被重命名的那个文件被删除了。并且新增了一个重命名后的文件。实质上他们两个文件是同一个文件。只是git没有那么智能化,不能自动识别
-
创建分支和切换分支
创建分支
git branch 分支名
切换分支
git checkout 分支名
- 每个分支都有自己的作用域,也就是每个分支都是独立的,做任何修改都不会影响到其他分支
合并分支
最终分支工作完成后,那么就需要合并分支,交由master分支上线了~
git merge 分支名
- 合并该分支到当前分支上,所以合并分支前,务必确认好再操作
快捷方式
git checkout -b 分支名
意思:创建并切换到分支
删除分支
git branch -d(--delete) 分支名
匿名分支
也就是说没有分支名的分支
git branch
直接进入没有名字的分支,同样具有自己的作用域。不过当切换到其他分支后,该分支上做过的操作都会消失,不过也可以安装
git
提示把这个匿名分支给予它名字,转换成一个正常的分支 -
checkout 命令
checkout命令和reset命令很相似
checkout命令功能
:
将处于暂存区的文件还原到工作目录
git checkout --<file> ...
将原文件恢复到工作目录
也就是说暂存区恢复的文件会覆盖工作区的文件
切换分支
git checkout 分支名
-
checkout和reset区别
-
在
reset
后面带文件时,不能使用--hard
和--soft
模式。也就是说,只能将文件恢复到暂存区 -
checkout
则是覆盖暂存区和工作区
checkout从历史快照(暂存区)中拷贝文件到工作目录
git checkout HEAD~ <file>
将会将上一个快照中的file文件复制到工作区和暂存区中
-