Git学习笔记(1)
一、简介
1.Git是Linus开发的一种分布式版本控制系统,与分布式概念相对应的是集中式,后者需要一台中央服务器,且必须联网才能工作。
2.在本地创建name
和email
,注:设置为ZhouXR和8437*****@qq.com
二、本地仓库
1.创建版本库(repository),可理解为目录。
Step 1:新建一个目录(如learn_git
),放到合适的位置
Step 2:cd
到该目录,用 git init
命令将其初始化,则空的Git仓库建好。
Step 3:编写一个文本文件(如test.txt
)(需要注意word格式为二进制,不能利用版本控制系统来跟踪,图片视频等也无法跟踪其详细变化,只能知道大小变化,故这里采用sublime来编辑)。
Step 4:将文件放到lean_git
目录下,并用命令git add test.txt
来将其添加到Git仓库,(注:可以多次add
不同的文件,最后一次性commit
到仓库)
Step 5:用命令git commit -m “这里写本次提交的说明”
告诉Git,将文件提交到仓库
2.修改及查看
1)命令git status
:可通过它来随时掌握仓库当前的状态,会提示是否修改,是否已提交等信息。
2)命令git diff test.txt
:如果上述命令运行后提示文件被修改过,可用此命令查看对文件进行的修改详情,例如词句的增删等。
提交修改和提交新文件的流程一样,先add
到仓库,再commit
到仓库。
3.版本回退
1)命令git log [--pretty=oneline] [filename]
:显示[某一文件]从最近到最远的提交日志,如果嫌输出信息过于繁复。可以加上后面的参数,只查看版本号和更改说明。
表1 命令git log
的常用参数
选项 | 解释说明 |
---|---|
-p |
按补丁格式显示每个更新之间的差异。 |
--stat |
显示每次更新的文件修改统计信息。 |
--shortstat |
只显示 --stat 中最后的行数修改添加移除统计。 |
--name-only |
仅在提交信息后显示已修改的文件清单。 |
--name-status |
显示新增、修改、删除的文件清单。 |
--abbrev-commit |
仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
--relative-date |
使用较短的相对时间显示(比如,“2 weeks ago”)。 |
--graph |
显示 ASCII 图形表示的分支合并历史。 |
--pretty |
使用其他格式显示历史提交信息。可用的选项包括 oneline ,short ,full ,fuller 和 format (后跟指定格式,常用格式如表2所示)。 |
表2 git log –pretty=format
的常用格式
选项 | 说明 |
---|---|
%H |
提交对象(commit)的完整哈希字串 |
%h |
提交对象的简短哈希字串 |
%T |
树对象(tree)的完整哈希字串 |
%t |
树对象的简短哈希字串 |
%P |
父对象(parent)的完整哈希字串 |
%p |
父对象的简短哈希字串 |
%an |
作者(author)的名字 |
%ae |
作者的电子邮件地址 |
%ad |
作者修订日期(可以用 --date= 选项定制格式) |
%ar |
作者修订日期,按多久以前的方式显示 |
%cn |
提交者(committer)的名字 |
%ce |
提交者的电子邮件地址 |
%cd |
提交日期 |
%cr |
提交日期,按多久以前的方式显示 |
%s |
提交说明 |
2)在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个为HEAD^^
,为方便表示,上n个版本可以记为HEAD~n
命令git reset --hard HEAD^
:表示回退到上一个版本,hard
参数表示彻底将工作区、暂存区和版本库恢复到指定的版本。注:--soft
参数表示仅撤销已提交的版本库内容,不会修改暂存区和工作区;--mixed参数
表示撤销已提交的版本库内容和暂存区内容,不会修改工作区内容。
命令git reset --hard 3625143 [filename]
:表示[将某文件]回退到commit id
为3625143
的版本,不能带路径进行硬性/软性重置(--mixed
带路径重置已弃用),若带上文件名,则需改参数为--
。
3)命令 git reflog
:记录每一次命令,可查看命令历史,即使退回旧版本后想再找回新版本也是可行的,只要找到commit id
即可。
4.工作区和暂存区
1)工作区(working directory):指电脑中能看到的目录,比如上面的learn_git
文件夹。
2)版本库(repository):指工作区中的隐藏目录.git
,表示Git的版本库。版本库中存放了很多东西,其中最重要的是暂存区(stage
或index
)和Git自动创建的第一个分支master
,以及指向master
的一个指针HEAD
。前面所说的向版本库中添加文件的操作,add
实际上是将文件修改添加到暂存区,而commit
就是将暂存区中的所有内容提交到当前分支。
区分:
命令git diff test.txt
:是工作区(work dict
)和暂存区(stage
)之间的比较,工作区进行了修改但还未add到仓库,此时使用会提示修改了哪些内容.
命令git diff --cached test.txt
:是暂存区(stage
)和分支(master
)之间的比较,add之后
、commit
之前使用会提示修改了哪些内容.
命令git diff HEAD -- test.txt
:工作区和分支之间的比较,此命令可用于查看工作区和版本库中最新版本的区别。
5.管理修改
1)每次修改,如果不add
到暂存区,那就不会加入到commit
中。
2)命令git checkout -- test.txt
:以暂存区为蓝本,覆盖掉工作区,用来丢弃本地修改。
3)命令git reset HEAD test.txt
:清空暂存区的提交,暂存区变为和仓库中相同的版本。
注:checkout
的默认值为暂存区,和reset
的默认值为HEAD
。因此reset
一般用于重置暂存区(除非使用--hard
参数,否则不会重置工作区);而checkout
命令主要是覆盖工作区。
6.删除文件
1)命令git rm test.txt
:将文件删除(暂存区和工作区的文件都会被删除)并用commit
命令提交,则版本库中的文件被删除。
2)若在工作区将某文件误删,则可用命令git checkout -- test.txt
将文件从暂存区中取出来,覆盖到工作区,即恢复到了版本库中的最新版本。
3)命令 git clean -f
可用来删除位于本地库中,但未被Git跟踪的文件,可以在删除之前使用git clean -n
来获得删除信息,以确定是否删除该文件。