这是程序锅对以前学习和使用 Git 作的一份整理,后头继续使用和学习 Git 的话,还会更新这分内容,因此喜欢的话能够关注一波【多选参数】哦,会第一时间在【多选参数】发布的。所以,这份就算是 v1.0 版本的吧。另外,附上了本篇内容的提纲,后头还会有几篇关于 Git 的,每篇都有这样的一份提纲。前端
在正式 git 以前,咱们先来了解一下 git 的 3 个区域,分别是工做目录、暂存区、版本历史。这个知识点是尤其重要的,在理解了这三个区域以后,git 的操做才会显得很容易。git
git status
命令查看的时候会显示出来。显示的内容就是相比以前的版本 A 变动了的哪些文件;
git add
命令以后,文件修改的东西就被提交到暂存区了,而工做目录中版本是变化以后了的,好比版本 B。那么使用
git status
以后,暂存区显示的内容是相对版本 A 的变化的文件信息,也至关因而版本 B 的状况;
git commit
以后,这个更改就被提交到了版本历史中,那么版本历史就从版本 A 变到了版本 B;
在使用 Git 管理文件系统的时候,须要进行一些配置,好比用户信息的配置。 Git 管理文件系统主要分为三个层次,以下所示(PS:只输入下面这些命令是不行的)web
# config的三个做用域
# 缺省等同于local $ git config --local # local只对某个仓库有效 $ git config --global # global对登陆用户全部仓库有效,在用户根目录下,好比 root 用户就在 /root 目录下有个关于 git 的配置文件 $ git config --system # system对系统全部登陆的用户有效,基本不用 复制代码
优先级 local > global > system,也就是说当对一个仓库同时设置了 global 和 local 那么采用local配置的信息。后端
查看配置信息bash
有些时候咱们也会查看 Git 配置信息等,使用以下命令能够查看相应层次的配置信息dom
# 显示 config 的配置 加--list
$ git config --list --local # 这个只能在git仓库中使用 $ git config --list --global $ git config --list --system 复制代码
配置信息---以用户信息为例编辑器
$ git config --global user.name 'your_name '
$ git config --global user.email 'your_email@domain.com' 复制代码
Git 相对于其余版本控制系统须要这些信息,是由于在版本控制中,作出的修改是跟这些用户信息捆绑在一块儿的。绑定的 email 是为了,当评审人员对代码提出了相应的修改,那么 Git 管理系统会对修改代码的提交者绑定的 email 发送邮件。因此email 须要是一个有效的 email,能收的到邮件的 email。学习
清除配置信息ui
$ git config --unset --local user.name
$ git config --unset --global user.name 复制代码
$ cd 项目代码所在的文件夹
$ git init 复制代码
$ git init your_project # 会在当前路径下建立和项目名称同名的文件夹
$ cd your_project 复制代码
git add
主要是把新文件或者文件变更的状况添加到暂存区spa
$ git add readme.md # 将 readme.md 文件添加到暂存区
$ git add . # 将当前工做目录的全部文件添加到暂存区 $ git add -u # 把修改以后的文件(这些文件已经被管理起来了)一次性提交到暂存区 复制代码
暂存区的文件也是至关于被 git 管理了的。
git status
能够查看工做目录和暂存区的状态
$ git status
复制代码
Tips:假如 bash 有颜色显示的话,会看到红色是表明工做目录,绿色表明暂存区。
git commit
命令进行提交,提交的历史会被记录下来
$ git commit -m 'Add readme.md' # -m 指定 commit 的信息
$ git commit # 这时候会跳出一个文本输入界面,让你输入更多的 commit 信息 复制代码
git mv
将 git 管理的文件进行重命名
git mv readme readme.md # 使用git的方式对文件进行重命名
复制代码
git rm
从 git 管理的文件删除某个已管理的文件,同时把修改的状况添加到暂存区
git log
命令查看提交历史,也就是版本演进历史
上面已经稍微使用了一下 git log
命令,这边更加详细的来阐述这个命令
git log # 只查看当前分支(Head所指的分支)的log状况
git log --oneline # 简洁的显示版本更新信息 git log -n2 # n2 表明查看最近两次commit历史 git log -2 # 2 表明查看最近两次commit历史 git log -n2 --oneline # 简洁的显示最近两次的版本更新信息 git log branch_name # 后面跟上分支名表示查看该分支的log日志 git log -all # 列出全部分支的log git log --all --graph # 以图形化的方式查看 git log --oneline --all # 以简洁的方式查看全部分支的log git log --oneline --all -n4# 以简洁的方式查看全部分支的log git help log # 以web的方式查看log的帮助文档,等同于 git help --web log # 和上面那条效果同样 复制代码
分支就至关于一个独立的开发空间,好比前端和后端开发,前端开发能够创建一个分支,后端开发也能够创建一个分支,可是彼此在不一样工做空间里面工做的时候是互不影响的,当须要集成的时候又能够把他们集成到一个公共的分支上面去。下面是有关分支的操做:
HEAD->temp2 表示当前的 HEAD 指向的是 temp2 分支,那么其实真正指向的是该分支最后一次 commit
git branch
查看分支状况、建立分支、删除分支
git branch -v # 查看本地分支的详细状况
git branch -a # 查看全部分支,包括远端分支,但没有过于详细的信息 git branch -av # 查看全部分支状况 git branch branch_name hash_value # 建立一个新的分支,基于 hash_value 的这个 commit 建立一个新的分支,hash_value 能够省略,那么默认是基于当前分支的最后一个 commit 建立。 git branch -d branch_name git branch -D branch_name # 这个分支已经有了一些 commit 复制代码
以下图所示,要想删除 temp 分支就得用 -D
git checkout
切换分支或者建立分支
git checkout branch_name # 切换分支
git checkout master git checkout -b branch_name git_id # 建立一个新的分支并切换过去,git_id能够是hash_value,也能够是某个分支的名字(分支的名字其实就指向了某个 commit) git checkout -b temp 9ef147d git checkout -b temp2 master 复制代码
切换分支,必须在.git的同级目录下执行
git diff hash_value1 hash_value2 # hash_value1 对应的 comimit 和 hash_value2 对应的 commit 进行比较
git diff hash_value1 hash_value2 -- file_name1 file_name2 # 在上述基础之上,只比较 file_name一、file_name2 这两个文件 git diff branch_name1 branch_name2 # 对两个分支进行比较 git diff branch_name1 branch_name2 -- file_name1 file_name2 git diff HEAD HEAD^ # HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较 git diff HEAD HEAD^1 # 同上 git diff HEAD HEAD^^ # HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较 git diff HEAD HEAD~ # HEAD 指向的 commit 与该 commit 的父亲 commit 进行比较 git diff HEAD HEAD~1 # 同上 git diff HEAD HEAD~~ # HEAD 指向的 commit 与该 commit 的父亲的父亲 commit 进行比较 git diff HEAD HEAD~2 # 同上 复制代码
1.能够直接使用 HEAD,由于 HEAD 实际上指向的是某个 commit 的。同理,比较两个分支的差别其实就是比较两个分支最近 commit 的差别,由于分支名其实就是一个指针,指向的仍是分支最近的 commit。
2.^ 后面只能跟数字1,一个 ^ 就表示往父亲 commit 这边追溯一个,以此类推
3.~ 后面跟任何数字均可,一样一个 ~ 就表示往父亲 commit 这边追溯一个,以此类推
git diff --cached
复制代码
好比一开始的话,HEAD 、暂存区和工做目录都是同样的,都是状态A,而且 readme*.md 文件都已经被跟踪起来了。下面咱们修改 readme3.md 文件,以后把它 add 到暂存区。而后使用上述命令进行比较,由于 HEAD 中的是历史,尚未被更新,是状态 A,而暂存区是状态 B,因此能够显示出差别。
git diff # 对全部文件进行比较
git diff -- file_name1 file_name2 # 对指定文件进行比较 复制代码
好比一开始的话,HEAD 、暂存区和工做目录都是同样的,都是状态A,而且 readme*.md 文件都已经被跟踪起来了。下面咱们修改 readme3.md 文件,可是不 add 到暂存区,而后使用上述命令进行比较,因为readme3.md 是在工做区中已经被更改了,工做区是版本 B,而暂存区还没更新是版本 A,因此进行比较会有以下结果。
本文使用 mdnice 排版