①具体的git版本控制操作。git status。
git专属的命令都是以git开始的。如:git status。git是主命令,status是子命令,后面还可以带一些参数。带参数的通常是-或者是--
执行:git status
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
表示:我们现在是在master这个分支上,即主分支上。分支:虽然我们没有设置分支,但默认是有master这个分支的。master这个分支也叫主干。
No commits yet
在本地仓库里面,还没有任何的提交内容。这个commits是名词,表示已经提交的内容。没有已经提交的内容commits,即本地仓库里面还没有WeChat项目提交的内容。
nothing to commit (create/copy files and use "git add" to track)
这个commit是动词,表示在临时存储区即暂存区,没有什么可以去提交。
创建/复制 文件用git add 去追踪(track),即用git add命令将文件放入暂存区(临时存储区)。追踪(track)文件即表示用git去管理这个(些)文件。
②具体的git版本控制操作。创建文件、修改文件再看git status。
vim good.txt
内容为:
aaaaaaaaa
bbbbbbbbb
cccccccccc
按Esc键,再输入:wq,保存。
再用git status查看一下状态:
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
在主干分支上。
No commits yet
在本地仓库WeChat项目还没有提交的内容。
Untracked files: 未被追踪的文件,good.txt是用红色标记了的。说明未被追踪的文件是不在暂存区(临时存储区)的。
(use "git add <file>..." to include in what will be committed) 用git add 命令把未被追踪的文件放入暂存区(临时存储区),为该文件可以被提交(be committed)到本地库做准备。
good.txt
nothing added to commit but untracked files present (use "git add" to track)
没有增加可以从暂存区(临时存储区)提交给本地仓库的文件,但是,在工作区present(出现了)没有被追踪的文件。可以用git add命令去追踪这个(些)文件。将工作区里面没有被追踪的文件增加到临时存储区(暂存区),使文件被追踪。
③具体的git版本控制操作。git add 文件名、再看git status。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git add good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
警告:是对换行符的解释和转换,是系统底层的东西。这里忽略解释。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
在主干分支上
No commits yet
WeChat项目在本地仓库没有提交的内容(commits)。
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: good.txt
说明暂存区(临时存储区)有内容了,可以有内容被提交。
用 git rm --cached 文件名可以将文件从暂存区(临时存储区)撤回。
这个在暂存区(临时存储区)的文件是:good.txt,用绿色标记了。
④具体的git版本控制操作。git rm --cached 文件名、再看git status。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git rm --cached good.txt
rm 'good.txt'
将good.txt文件从临时存储区(暂存区)撤回到工作区。在暂存区移除文件good.txt
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
在主干分支
No commits yet
WeChat项目在本地仓库没有提交的内容
Untracked files:
(use "git add <file>..." to include in what will be committed)
good.txt
nothing added to commit but untracked files present (use "git add" to track)
没有被追踪的文件good.txt
用git add 文件名 将文件放到暂存区(临时存储区),可以用来提交到本地仓库。
没有被追踪的文件即在工作区而不在暂存区(临时存储区)的文件出现(present)。
然后:ll
工作区中,文件good.txt还在,移除只是移除暂存区的内容。
重新执行:
git add good.txt
git status
⑤具体的git版本控制操作。git commit 文件名(从暂存区提交到本地库)、再看git status。
git commit good.txt
进入一下窗口:
# Please enter the commit message for your changes. Lines starting
对于你这次修改做出的改变,你需要在这里输入提交的信息。
那为什么要输入这个信息呢?这个信息相当于写代码的时候的注释,表示此次提交到本地仓库是什么意思,有什么功能,达到什么目的,想实现什么效果,加一个提交的message就非常明显了。记录一下,本次提交的目的。
# with '#' will be ignored, and an empty message aborts the commit.
#以#开头的内容会被忽略。如果是空的信息,提交将被终止。
# On branch master
在主干分支上
#
# Initial commit
#
# Changes to be committed:
# new file: good.txt
#
输入
:set nu,再回车,可以显示行号。
说明我们现在是在vim编辑器里面。
按I键,进入编辑(插入)模式。
写好以后按Esc键,再:wq,写入退出。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git commit good.txt
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
[master (root-commit) 235edef] My first commit.new file good.txt
主干分支 第一次提交,即为根(root)提交, 235edef粗略的认为是这次提交所形成的版本号。
1 file changed, 3 insertions(+)
一个文件被改变,三条信息被插入
create mode 100644 good.txt
创建模式100644
git status查看一下。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
nothing to commit, working tree clean
暂存区(临时存储区)没有内容可提交。工作树干净了。即工作区内容没有更改,暂存区内容已提交本地库。
即从工作区到暂存区到本地库,good.txt已完成。且good.txt还没有再更改。
⑥具体的git版本控制操作。更改文件,git add 文件名、git commit 文件名(从暂存区提交到本地库)、再看git status等操作。
更改文件good.txt,新增UUUUUUUUUU这一行。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
在主干分支上
Changes not staged for commit
stage:存储、暂存
存在没有暂存(not staged)的修改(即这个修改还没有放入暂存区即临时存储区),这个修改可以用来提交。(暂存区即临时存储区提交到本地仓库即本地库)
(use "git add <file>..." to update what will be committed)
因为good.txt有一份历史版本在暂存区,则这里是update,更新该历史版本。在暂存区没有good.txt历史版本的时候,提示的是:
Untracked files:
(use "git add <file>..." to include in what will be committed)
good.txt
用的是untracked没有被追踪,和include(包含进)
(use "git checkout -- <file>..." to discard changes in working directory)
这个命令在后面和另一个命令对照看。
modified: good.txt
检测到文件是被修改了的(modified)
no changes added to commit (use "git add" and/or "git commit -a")
没有内容添加到暂存区,可以被提交。
可以先git add 文件夹,再git commit 文件夹
也可以git commit -a一步搞定,将文件加入暂存区再提交本地库。
这是修改的文件的提示。
新建时,即当工作区没有good.txt文件的时候,提示是:
nothing added to commit but untracked files present (use "git add" to track)
没有被追踪的文件good.txt
当暂存区没有good.txt文件时,只能先用git add 文件名,先追踪文件,将文件加入暂存区。再用git commit 文件名,提交到本地库。而当暂存区有good.txt文件历史版本后,可以git add 文件名,将文件加入暂存区,再git commit 文件名,提交到本地库,也可以一步操作:git commit -a文件名,但是当暂存区没有good.txt历史版本,则不能一步操作,git commit -a文件名。
在这里,我们一步步操作。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git status
On branch master
Changes to be committed:
这个修改改变以后,则可以将文件提交到本地库了。
(use "git reset HEAD <file>..." to unstage)
这个命令,后面单独说。
modified: good.txt
⑦具体的git版本控制操作。git commit -m "message" 文件名(从暂存区提交到本地库,不打开vim编辑器输入message信息)、再看git status等操作。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git commit -m "My second commit.modify good.txt" good.txt
不用进vim编辑器了,如果是git commit good.txt 就要进vim编辑器。
warning: LF will be replaced by CRLF in good.txt.
The file will have its original line endings in your working directory
[master 606c01a] My second commit.modify good.txt
主干分支上,粗略理解为提交到了版本号为: 606c01a
第一次提交,有root commit,根提交,这里不是第一次提交,所以没有了根提交。根提交只能有一个。
1 file changed, 1 insertion(+)
⑧版本穿梭(版本的前进和后退)测试的准备工作。命令:git log。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git log
commit 606c01acf23171703bc024c6c2575a3727d3e078 (HEAD -> master)
Author: tom_pro <[email protected]>
Date: Wed Jan 1 13:04:36 2020 +0800
My second commit.modify good.txt
表示:这是一次提交(commit),值:606c01acf23171703bc024c6c2575a3727d3e078,是这个提交的索引,指向整个提交的信息。这个值:606c01acf23171703bc024c6c2575a3727d3e078实际上是一个哈希值。文件不变,文件无论哈希运算多少次,哈希后的值都不会变。文件有一点点改变,哈希运算后的哈希值就会改变。
HEAD是一个指针,说明当前的本地库指向哪一个版本。
作者(author): tom_pro <[email protected]>,这就是前面配置的签名。
Date是提交的时间。
My second commit.modify good.txt是当时提交的信息,-m后面加的字符串""或者是vim编辑器里面加入的信息(message)
commit 235edef61b71ae284b729a24f0c5f002eebfe607
Author: tom_pro <[email protected]>
Date: Wed Jan 1 09:48:17 2020 +0800
My first commit.new file good.txt
往good.txt里面多加一点内容:
再按照以上步骤多添加,添加到一页屏幕放不下。用空格键可以翻到下一页,用Q键可以退出。
自己添加以后,一页放不下,要四页:空格键翻下一页:
按Q键退出:键B向上翻页
⑨查看历史记录的几种不同方式。git log 后面可以附加参数。如:
git log --pretty=oneline、git log --oneline、git reflog、
git log --pretty=oneline
HEAD是指针,表示目前指针指向本地仓库的索引号是:5c1c61771ffe3f3bd9edfe65aaf579f64952f5d5的历史版本。
git log --oneline,哈希值只显示一部分。
git reflog,这个查看日志的方式,对前进后退移动指针,非常有价值。
Administrator@ZFIZRPF39J6HN8I MINGW64 /d/gitworkspaces/WeChat (master)
$ git reflog
5c1c617 (HEAD -> master) HEAD@{0}: commit: insert rrrrrrrrr edit
表示指针到索引为部分哈希值5c1c617的历史版本,需要移动 HEAD@{0},0步。
d911c10 HEAD@{1}: commit: insert qqqqqqqqq edit
表示指针从当前位置(5c1c617)指向部分哈希值为d911c10的历史版本,需要移动HEAD@{1}:,1步。
b0ae86d HEAD@{2}: commit: insert ppppppppp edit
表示指针从当前位置(5c1c617)指向部分哈希值为b0ae86d的历史版本,需要移动HEAD@{2}:,2步。
0569ced HEAD@{3}: commit: insert ooooooooo edit
表示指针从当前位置(5c1c617)指向部分哈希值为0569ced的历史版本,需要移动HEAD@{3}:,3步。
以此类推:4步。。。。。。。。。16步,注意:是从当前位置,即部分哈希值是5c1c617的索引位置开始移动指针的话。
389751d HEAD@{4}: commit: insert nnnnnnnnn edit
fd96ea9 HEAD@{5}: commit: insert mmmmmmmmm edit
5540b38 HEAD@{6}: commit: insert lllllllll edit
cd0414d HEAD@{7}: commit: insert kkkkkkkkk edit
14e1663 HEAD@{8}: commit: insert jjjjjjjjj edit
213efcb HEAD@{9}: commit: insert iiiiiiiii edit
62fb747 HEAD@{10}: commit: insert hhhhhhhhh edit
3ddf910 HEAD@{11}: commit: insert ggggggggg edit
75c9a7b HEAD@{12}: commit: insert fffffffff edit
7499389 HEAD@{13}: commit: insert eeeeeeeee edit
0bea62a HEAD@{14}: commit: for test history
606c01a HEAD@{15}: commit: My second commit.modify good.txt
235edef HEAD@{16}: commit (initial): My first commit.new file good.txt