一.使用前配置
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 –system 选项的 git config 时,它会从此文件读写配置变量(对应Windows文件在 git 的安装目录下$git\mingw64\etc)。
~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递–global 选项让 Git 读写此文件(对应Windows文件在C:\Users\$USER目录下的.gitconfig)。
当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
每一个级别覆盖上一级别的配置。
1.配置全局用户名及邮箱
当安装完 Git 应该做的第一件事就是设置用户名称与邮件地址。这样做很重要,因为每一个 Git 的提交都会使用这些信息,每次输入该命令都会覆盖上次输入的值:
$ git config --global user.name "username"
$ git config --global user.email "email"
如果使用了 –global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用这些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行不使用 –global 选项的命令来配置(即为当前项目配置用户名)。
2.配置项目的用户名及邮箱
如果想要在当前项目中使用非全局的用户名或邮箱,可以使用不带–global参数的命令设置项目专属用户名及邮箱。
$ git config --global user.name "username"
$ git config --global user.email "email"
正如上文所说每一个级别覆盖上一级别的配置。
3.增加/删除配置
(1).添加配置项
参数 -–add
格式 : git config [–local|–global|–system] –add section.key value(如果不输入–local、–global、–system等参数,默认是添加在 local 配置中)
注意add后面的 section, key, value 一项都不能少,否则添加失败。比如执行:
$ git config --add section.key value
(2).删除配置项
参数 -–unset
格式 : git config [–local|–global|–system] –unset section.key
$ git config --local --unset section.key
二.创建本地版仓库
仓库又称之为版本库,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建版本库步骤如下:
1.选定仓库位置
$ mkdir learn_git
$ cd learn_git/
以上两行命令是创建一个空的目录并进入该目录。当然我们也可以使用已存在的目录作为仓库。
为了避免遇到各种莫名其妙的问题,应注意目录名(包括父目录)不包含中文。
2.初始化仓库
$ git init
Initialized empty Git repository in D:/Workspace/Git_Repositories/learn_git/.git/
通过git init
命令将当前所在目录初始化为 git 仓库,如果初始化成功会出现第二行的提示,此时通过命令ls -a
可以看到learn_git
目录下会出现一个.git
的目录(该目录是Git来跟踪管理版本库的)。
三.提交文件
这里先明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
首先我们先创建一个需要提交的文件:
$ vim hello_git.txt
通过上述命令编辑一个文件,在该文件中写入以下内容并保存创建hello_git.txt。
hello git
注意 : 该需要提交的文件必须在git仓库的目录下,因为 git 并不能管理仓库之外的文件。
提交文件步骤如下:
1.将需要提交的文件加入仓库
$ git add hello_git.txt
执行上述命令将hello_git.txt
加入仓库,如果没有任何提示则表明添加成功。可反复多次使用,添加多个文件。
2.将文件提交
$ git commit
通过上述命令将仓库中未提交的文件进行提交。此时会提示要求输入本次提交的描述,输入后保存并退出即可。然后会出现本次提交的信息如下:
[master (root-commit) c0b1656] first commit hello_git.txt
1 file changed, 1 insertion(+)
create mode 100644 hello_git.txt
四.修改文件
1.查看 git 仓库的状态
通过命令 vim hello_git.txt
对 hello_git.txt
做任意修改后保存并退出编辑。然后通过命令 git status
查看当前 git 仓库的状态 :
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: hello_git.txt
no changes added to commit (use "git add" and/or "git commit -a")
上述输出告诉我们 hello_git.txt
已经被修改了但是还未准备好提交。
2.查看文件的修改内容
通过命令 $ git status
我们只能看到文件配修改了但是并不知道具体修改的内容,如果想要知道文件那些内用被修改了,可以通过命令 git diff
查看。输出如下 :
$ git diff
diff --git a/hello_git.txt b/hello_git.txt
index 8d0e412..45a827c 100644
--- a/hello_git.txt
+++ b/hello_git.txt
@@ -1 +1,2 @@
-hello git
+hello_git
+first change
xuexi@xuexin MINGW64 /d/Workspace/Git_Repositories/learn_git (master)
通过查看我们可以了解到本次修改将第一行的 hello git
改为了 hello_git
,并且添加了第二行 first change
。
3.提交修改
通过命令 git diff
我们了解到了我们修改的内容,如果确认修改无误之后就可以进行提交,提交修改还是分两步走首先通过命令 git add
。
$ git add hello_git.txt
此时还是没有任何输出提示,则表示成功。而在 git commit
命令之前,我们在通过 git status
命令查看此时的 git 仓库状态,输出如下 :
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello_git.txt
此时表示已经准备好提交 hello_git.txt
文件了,但如果想要发现 hello_git.txt
文件不需要被提交,可以通过命令 $ git reset
来移除准备提交,命令如下 :
$ git reset hello_git.txt
Unstaged changes after reset:
M hello_git.txt
此时相当于又回到了第 (1) 步。现在通过命令 git add
重新将文件 hello_git.txt
进行准备提交。命令如下 :
$ git add --a
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello_git.txt
其中第一行 --a
表示将所有“ 已追踪 ”状态的文件添加入准备更新行列中。最后再通过 git commit
提交本次修改。本次提交后的输出如下 :
$ git commit
[master f98631f] first change
1 file changed, 2 insertions(+), 1 deletion(-)
五.版本回退
此时将 hello_git.txt
进行再一次修改并提交。
1.查看历史修改
此时我们的 git 仓库已经有了三个版本 (1.创建hello_git.txt
; 2.第一次修改 ; 3.第二次修改),通过命令$ git log
查看历史修改的版本。
$ git log
commit 96ba3e1216182448a7380fda821219d69fdd101f (HEAD -> master)
Author: xuexin <h_xxin1994@163.com>
Date: Sun Nov 19 22:47:05 2017 +0800
second change
commit f98631f2beae4871acb00a582308193b5b57bd51
Author: xuexin <h_xxin1994@163.com>
Date: Sun Nov 19 22:22:58 2017 +0800
first change
commit c0b1656f77e9f5587aee6209995a37dd43054c16
Author: xuexin <h_xxin1994@163.com>
Date: Sat Nov 18 19:13:04 2017 +0800
first commit hello_git.txt
git log命令显示从最近到最远的提交日志\。
如果嫌输出信息太多,可以试试加上 --pretty=oneline
参数:
$ git log --pretty=oneline
96ba3e1216182448a7380fda821219d69fdd101f (HEAD -> master) second change
f98631f2beae4871acb00a582308193b5b57bd51 first change
c0b1656f77e9f5587aee6209995a37dd43054c16 first commit hello_git.txt
--pretty
参数的取值除了用还可以用 oneline
之外还能使用 --format
等;另外除了 --pretty
参数还能使用 --since
“ 等参数,此处就不列举。
2.版本回退
首先,Git必须知道当前版本是哪个版本,在Git中,用 HEAD
表示当前版本,上一个版本就是 HEAD^
,上上一个版本就是 HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成 HEAD~100
。而我们可以通过使用 git reset
命令进行版本的回退,命令如下 :
$ git reset --hard HEAD^
HEAD is now at f98631f first change
其中 f98631f
表示提交的版本号,该值又 git 管理,暂时无需理会,而 first change
则是我们当时提交时输入的更新描述。
此时我们还可以继续回退到上一个版本(第一版),不过如果此时我们用 git log
再看看现在版本库的状态:
$ git log --pretty=oneline
f98631f2beae4871acb00a582308193b5b57bd51 (HEAD -> master) first change
c0b1656f77e9f5587aee6209995a37dd43054c16 first commit hello_git.txt
此时第三版的记录已经查不到了,如果想要回到第三版可以通过命令 git reflog
用来记录你的每一次命令 :
$ git reflog
f98631f (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
96ba3e1 HEAD@{1}: reset: moving to HEAD
96ba3e1 HEAD@{2}: commit: second change
f98631f (HEAD -> master) HEAD@{3}: commit: first change
c0b1656 HEAD@{4}: commit (initial): first commit hello_git.txt
此时我们就可以看到第三版的id值 96ba3e1
,通过 git reset --hard commit_id
进行回退。
$ git reset --hard 96ba3
HEAD is now at 96ba3e1 second change
六.小结
1.属性配置
通过 git config
进行属性的配置,可以使用三个参数(1.系统配置 --system
2.全局配置--global
3.本地配置(仅对当前项目有效) --local
),如果不填写这三个参数中的任意一个参数默认使用 --local
。
通常在安装完成 git 客户端后都需要配置全局用户名及邮箱,每次提交文件使都会有该附上提交人的用户名及邮箱。
$ git config --global user.name "username"
$ git config --global user.email "email"
2.创建本地仓库
进入选定的目录后使用命令 git init
将该目录初始化为 git 仓库,可以通过 ls -a
查看当前目录下可以看到名为 .git
的文件即表示成功。
3.提交文件
添加文件到Git仓库,分两步:
第一步 : 使用命令git add
将文件添加入工作区,可反复多次使用添加多个文件。如果想要一次性将所有已追踪的文件加入可以使用 git add --a
;
第二步 : 使用命令git commit -m "描述信息"
工作区的文件提交至本地仓库。
4.修改文件
使用命令 git status
可以随时掌握 git 仓库的状态。
使用命令 git diff
可以查看已经修改的内容。
5.版本回退
使用命令 git log
查看提交的历史。
使用命令 git reset
回退至某个版本,如回退至上个版本使用 git reset --hard HEAD^
,其中 HEAD
表示当前版本,^
表示上一版本,可以使用n个 ^
回退至 n 个前版本,也可以使用版本 id 回退至指定版本。
如果回退过头要前进值某版本,使用 git reflog
查看命令历史可以知道版本id。