Git学习-3 Git常用操作

 

1.Git用户分类

1>创建用户

作为版本控制系统的客户端,每台客户机对版本库的所有提交操作都需要注明操作者身份,所以客户机首先需要进行自我身份的注册,即创建用户。Git要求"用户名和Email"这两样信息是必不可少的。

Git有三种不同的创建方式,会产生三种不同作用域的用户,这三种创建方式的用户信息会写到三个不同的配置文件中,这三种用户的创建均需要使用git config命令,只不过使用的选项不同。

这三种创建方式的创建的用户作用域由大到小依次是:系统用户,全局用户与本地库用户,在多种用户都进行了创建的前提下,小范围用户会覆盖大范围用户,即默认会以小范围用户操作Git;

(1)系统用户:当前主机系统中所有用户均可以使用的Git用户;

(2)全局用户:当前主机系统的当前登录用户可以使用的Git用户;

(3)本地库用户:只能对当前的本地版本库进行提交的Git用户;

2.创建系统用户

可在任意目录下运行创建命令:git config --system   ---->创建系统用户

git config --system user.name "china"

git config --system user.email "china@126.com"

用户注册信息会写道/mingw64/etc/gitconfig中:

 

Administrator@F1KSNJS1CKVCTFU MINGW64 /d/document/course/git/repositories/P2P (master)
$ cat /mingw64/etc/gitconfig  ---->查看系统用户的信息
[http]
sslCAInfo = D:/application/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = openssl
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[credential]
helper = manager
[user]
name = china                   ---这两个就是
email = china@126.com  ---系统用户的信息

 

Administrator@F1KSNJS1CKVCTFU MINGW64 /d/document/course/git/repositories/P2P (master)

当然也可以使用以下命令查看配置信息: git config --system --list   --->查看系统用户的信息

$ git config --system --list
http.sslcainfo=D:/application/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=china
user.email=china@126.com

3.创建全局用户

可以在任意目录下运行 git config --global  ---->创建全局用户

git config --global user.name "beijing"

git config --global user.email "bj@126.com"

用户注册的信息会写到当前用户目录下的.gitconfig文件中: 

 cd C:/Users/Administrator

cat .gitconfig
[user]
name = beijing        ----这两个是全局
email = bj@126.com   ----用户的信息

或者通过 git config --global --list查看信息

$ git config --global --list
user.name=beijing
user.email=bj@126.com

4.创建本地库用户

本地库用户只能在当前的本地库目录下运行该命令:git config 

切换到 /d/document/course/git/repositories/P2P目录:

git config user.name "haidian"

git config user.email "hd@126.com"

用户注册信息会写到当前版本库目录下的.git目录中的config文件中

可以通过

cat c:/Users/Administrator/.gitconfig 或者git config --list
[user]
name = beijing
email = bj@126.com

5.Git基本操作

1>新建文件: 

在本地版本库中新建一个hello.html文件,文件内容Hello Git World

echo "hello git world" > hello.html    ---->新建文件

2>查看状态:

用于查看当前版本库的Git状态:

git status

以上为执行命令之后git反馈的信息,提示:没有任何文件被添加到提交,没有被跟踪的文件(使用git add 进行跟踪)

3>添加管理 git add 到暂存区

添加单个文件

作用将指定文件的当前快照写入版本库暂存区,即将文本将给Git进行版本管理

添加多个文件 git add 后添加多个文件,文件之间使用空格分隔

或者使用通配符git add bj-*.txt命令添加文件

 

 

4>提交操作 git commit -m ‘操作说明’

将git暂存区的文件快照永久的写入到本地仓库中

 

nothing commit 说明没什么可以提交了;

5>忽略文件:

一般工作区中有些文件不想交给Git管理,但由于该文件处于工作区,所以git status的时候会给出xx文件Untracked(未被跟踪),那么可以使用Git忽略这样的文件,再运行Git status命令时候不对其进行检测。

只要在工作区创建一个文件,名为.gitignore把要被忽略的文件名写入到其中,然后将.gitignore文件add添加并提交commit到本地版本库即可,可以忽略;

step:

(1)新建一个要被忽略的文件 echo "adfsdf" > info.txt

在工作区随意新建一个文件,叫做info.txt

(2)查看git状态 git status

(3)新建并提交.gitignore文件

在工作目录下次新建.gitignore文件,并将要被忽略的info.txt文件写入到其中,然后将.gitignore文件添加add并提交commit到本地版本库

echo "info.txt" > .gitignore

git status 

git add .gitignore

git commit -m "忽略提交的文件"

(4)再次查看git状态 git status

已经没有info.txt 文件untracked,说明已经忽略掉了

(5)将.gitignore文件中内容再次清空提交,发现info.txt再次报未被跟踪

echo "" > .gitignore

 git add .gitignore

git commit -m "文件提交"

git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)

info.txt

nothing added to commit but untracked files present (use "git add" to track)

总结:忽略文件就是将文件名称添加到.gitignore文件中,并add commit.gitignore文件可以控制想被忽略的文件不受git管理控制

6>查看区别操作: git diff 

工作区:文件可编辑

暂存区:文件快照

分支区:存放多个分支

(1)比较工作区和暂存区的区别: 

使用无选项git diff 命令

场景:hello.html已提交到版本库,然后工作区做了修改:

使用git diff hello.html查看工作区和暂存区的区别

当使用git add hello.html然后再git diff hello.html会发现没有内容输出:

(2)比较暂存区和本地库的区别:

使用带--cached选项的git diff命令 表示暂存区比本地版本库中的区别

工作区和暂存区一致,但是未commit:

当git commit -m "统一暂存区和版本库"之后再git diff会发现都一致

7>撤销修改:

以下内容总结为:

7.1>仅工作区修改:撤销使用 git checkout --hello.html 

7.2>工作区暂存区修改,撤销使用:git reset HEAD hello.html

7.3>工作区,暂存区和本地版本库都修改了(已经commit了),撤销使用:

  (1)本地版本库和暂存区和工作区都修改了: git reset --hard commitid或者HEAD^之类的                  --->git reset --hard 版本号

 

  (2)本地版本库和暂存区回退,工作区不影响:git reset --mixed  commitid或者HEAD^之类的              --->恢复使用git add git commit , 如果版本跳跃过多的话使用版本号跳转

  (3)仅本地版本库回退: git reset  --soft commitid或者HEAD^之类的                                                  --->git commit

 对于已修改的文件内容进行撤销,根据修改内容修改的位置分为3种情况

(1)工作区中修改,未add添加到暂存区:

将文件复原即可,但是文件修改较多时候,使用git checkout -- hello.html命令

git checkout -- hello.html 将从本地版本库中获取文件覆盖掉目前的文件

git diff hello.html 再去比较或者cat hello.html就没有区别了

(2)add到暂存区,未commit到本地版本库:

git reset HEAD hello.html

git diff hello.html没有区别

但是git diff --cached hello.html是有区别的:

当执行完git reset HEAD hello.html这个命令之后,相当于是回退了一步,此时暂存区的内容回滚到本地版本库的内容,所以再

git diff --cached hello.html是一致的

但是 git diff hello.html是不一致的

(3)commit到本地版本库:

当修改内容已经提交到本地版本库中了,这种情况不能撤销修改,但是可以回退到修改之前的版本

a.查看历史版本 git log

(a.1)查看简单形式的日志:

也可通过git log命令添加选项 --pretty=oneline以单行形式简单展示日志命令

git log --pretty=oneline

(a.2)git log --pretty=oneline --abbrev-commit

前面方式下的commit id显示的是全长度的id,可以以简写的commit id方式来显示,只需要添加 addrev commit选项即可。abbrev:缩写,简写;

 (a.3)翻页与退出

当git log日志命令显示的内容太多,无法在一页内显示完所有内容时,其最后一行会出现一个冒号,让输入命令,常用的命令有:

回车:显示下一行

空格:显示下一页

q:退出git log命令

(a.4)HEAD指针

Git会默认创建一个master分支,即主分支,这是Git对版本进行管理的唯一的一条时间线,在这条master时间线上有很多版本的时间节点,而HEAD指针则指向的是当前刚刚提交的版本时间节点。

它可以通过^的数量来表示当前版本之前的版本,例如HEAD^表示当前版本的前一个版本,HEAD^^表示前两个版本,但是当版本较多的时候,此时可以使用~加数字表示当前版本之前的第几个版本

(a.5)查看可也引用历史版本

git log只可以查看到HEAD指针及其之前的信息,如果版本回退到HEAD^^,那么这就是当前版本HEAD,查看其实最后的版本git log是看不到的,可使用git reflog可查看所有的历史版本信息。

b.版本回退:

git reset:

(b.1)git reset  --soft:仅仅改变本地版本库的版本,不会影响工作区和暂存区

回退到指定版本,但仅仅修改分支中的HEAD位置,不会改变工作区与暂存区的文件的版本,实际上是改变了暂存区commit之前的状态,意思就是本地版本库回退到了上一个状态

回退前: 首先在版本库中的hello.html文件添加一行内容,提交,再回退到该版本

step:

hello.html追加一行记录;

git diff hello.html 有差别

git diff --cached hello.html 没有区别

git add hello.html

git diff hello.html 没有差别

git diff --cached hello.html 有区别

git commit -m "追加hello.html文件内容"

git diff hello.html 没有差别

git diff --cached hello.html 没有区别

 git log --pretty=oneline查出下面的日志:

对比工作区和暂存区以及暂存区和本地版本库的差异:此时没有差异

发生回退:回退到前一个版本: git reset --soft HEAD^

回退后:

此时git diff hello.html发现没有区别

但是 git diff --cached hello.html 发现有区别的,暂存区比本地版本库多了添加的一行,本地版本库的版本回退到上一个版本了;

说明暂存区没有回退,只是本地版本库回退到了上一个版本;

git log --pretty=oneline 发现没有之前的版本了;

git reflog

恢复到之前的版本:可再次git commit 即可

(b.2)git reset --mixed (是git reset命令的默认选项)

回退到指定版本,不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本,但是工作区中的版本不改变

 step:

hello.html中新增数据

git add hello.html

git commit -m "append six" 之后三个区内容都是保持一致的

git reset --mixed HEAD^ 

回退之后作对比:

工作区比暂存区内容多出SIX

暂存区和本地版本库没有区别

尚未进行add的操作

恢复回退之前的版本: git add 再git commit 但是如果是版本之前的很多版本不建议这样做,使用版本跳转的方式:git reset 版本号就可以了

(b.3)git reset --hard

回退到指定版本,该命令不仅修改了分支中HEAD指针的位置,还将工作区,暂存区和本地库中数据也回到了指定的版本

git reset --hard HEAD^

git diff 之后发现没差异

cat hello.html发现工作区内容也更改了

恢复回退前的版本

git reflog 

8>删除文件

删除文件需要先查看文件的状态,若是未被git管理,可在工作区删除,若已add或commit则需要通过git命令来控制

step:

(1)新建一个文件:

add,commit之后删除

(2)查看暂存区文件列表:

git ls-files : 查看暂存区文件列表

(3)查看本地版本库文件列表 

git ls-files --with-tree=HEAD 

该命令实际上查看的是主分支上当前HEAD指针所指向的时间点的文件列表,若查看上面时间点的文件列表,可以将HEAD替换成HEAD^,当前也可以使用HEAD~N

(4)仅删除暂存区中的指定文件 git rm --cached hello.html

查看暂存区和本地库:暂存区中删除了,本地库中仍然存在

此时通过git commit 命令可以将本地库中的文件也删除;

(5)恢复被删除文件命令 git reset HEAD hello.html,然后再git commit也恢复本地库中的文件了

(6)完全删除文件:本地版本库,暂存区,工作区都删除:

git rm hello.html

查看工作区:ls

查看暂存区:git ls-files

查看本地库:git ls-files --with-tree=HEAD  发现本地库仍然存在

若要本地库也删除,直接 git commit -m '删除文件'即可

9>恢复被删除的文件

git checkout --

使用版本回退命令,将版本回退到删除之前的版本即可

(1)查看要回复的commitid:  

git reflog

(2)恢复:git reset --hard commitid

(3)查看各个区域文件的情况

 

posted on 2018-09-05 17:28  companion  阅读(290)  评论(0编辑  收藏  举报