内容简介:曾经听到过这样一句话:不会因此,为了避免这种情况,接下来我们就一起来好好学习
前言
曾经听到过这样一句话:不会 git 就不要敲代码了。细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧!
因此,为了避免这种情况,接下来我们就一起来好好学习 git 的相关知识吧!不怕你不会,就怕你不看!
一、 git 的三个分区:
- 工作区(
working directory) - 暂存区(
stage) - 版本库
它们之间的关系为:
通过 git status 查看 git 状态时, 红色 的文件表示在 工作区 ; 绿色 的文件表示在 暂存区 :
工作区中的文件只要通过 git add 命令添加进了 Git 仓库,就会被追踪。
二、 git 常用命令
| 创建版本库 | 版本控制 | 远程协作 | 查看信息 |
|---|---|---|---|
git init |
git add |
git pull |
git help |
git clone |
git commit |
git push |
git log |
| * | git rm |
* | git diff |
三、 git 配置
1. git config
可以通过三个地方的三个文件设置 git 配置参数,分别代表三个不同的作用域:
-
/etc/gitconfig:作用域:一台计算机(操作系统)上的所有用户,几乎不会使用, 优先度低于--global;设置方法:git config --system
-
~/.gitconfig:作用域:计算机中的某用户创建的所有项目,常用, 优先度低于--local;设置方法:git config --global
-
.git/config:作用域:某一特定的版本库,不常用, 是最具体的,优先度最高 ;设置方法:git config --local
可使用 git config 查看相关操作命令以及提示:
2. user.name 与 user.email
添加配置
user.name 和 user.email 指的是用户名和邮箱,这些两个配置会被添加到提交信息中,可以搭配上述命令配置到三种作用域中:
- 仓库配置 :通过
--local命令配置,作用域为当前版本库,配置写入.git/config文件中,优先度第一;
git config --local user.name "张三" git config --local user.email test1@git.com
以上为配置特定版本库( mygit )的用户和邮箱:这样配置就可以通过两个版本库来进行多人操作的模拟;
- 用户配置 :通过
--global命令配置,作用域为当前系统用户,配置写入~/.gitconfig文件,优先度第二;
git config --global user.name "张三哥哥" git config --global user.email test2@git.com
- 系统配置 :通过
--system命令配置,作用域为当前操作系统 所有用户 ,配置写入/etc/gitconfig文件,优先度第三;这里需要管理员身份运行git bash才有修改权限:
git config --system user.name "张三爸爸" git config --system user.email test3@git.com
查看配置
-
直接查看配置文件(可通过
cat指令查看):- 仓库配置 :
.git/config
- 用户配置 :
~/,gitconfig
- 系统配置 :
/etc/gitconfig
- 仓库配置 :
-
通过
git config --list: 可以批量查看配置信息:
- 通过
git config user.name/email查看:
可以看到输出的配置信息是 仓库配置 张三,验证了仓库配置的 优先级最高 ;
修改配置
删除 config 配置
git config --unset <参数名>
首先设置错误参数,随后查看该配置:
删除该配置:
修改 user.name/email 配置
- 可以通过添加配置的方式对原有配置进行覆盖,从而达到修改的效果:
- 通过
--unset命令 删除 指定的配置信息:
我们以该方式继续删除 用户配置 --global user.name : 张三哥哥 ,和 仓库配置 --local user.email : test1@git.com :
此时再次通过 git config user.name/email 查看配置信息 user.name/email :
可以发现 user.name 显示的是系统配置: 张三爸爸 , user.email 显示的是用户配置: test2@git.com ,验证了用户配置优先级 第二 和系统配置优先级 第三 ;
3. .gitignore
我们可以通过 git 提供的 .gitignore 文件配置不被 git 跟踪的文件。被添加到 .gitignore 文件中的文件名,将不会被 git 追踪。如下图中的新增文件 setting.properties :
可见在 .gitignore (注意文件是官方规定好了的不能随便乱改)文件中添加了文件名 setting.properties 后, git 便不再追踪 setting.properties 这个文件了;
应用场景:通常将不需要提交的项目依赖文件(如 modules 目录下文件)添加到 .gitignore 文件中,这样每次提交都会自动忽略这些文件;
只要与.gitignore中内容相匹配的目录或文件就会被git忽略;再例:
.gtiignore文件非常重要,一般放在创建项目的根目录上。
注意在 .gitignore 文件中 一行写一个 文件名; .gitignore 文件也支持 正则表达式 比如:
-
*.a:忽略所有以.a结尾的文件; -
!lib.a:表示除了lib.a文件,其余都会被忽略; -
/TODO:仅仅忽略项目 根目录 下的TODO文件,不包括subdir/TODO(TODO为示例文件);- 可以通过
/*/TODO使一层目录下的TODO文件被忽略; - 通过
/**/TODO使所有层目录下的TODO文件都被忽略;
- 可以通过
-
build/表示忽略build目录下的所有文件; -
doc/*.txt表示忽略doc目录下所有的.txt文件,包括doc/notes.txt但不包括doc/server/.arch.txt;-
doc/*/*.txt会忽略doc目录及其任何一个子目录下的所有.txt文件,比如doc/bin/2.txt(/ *表示一层目录); - 而
doc/**/*.txt则会把doc任何一层目录及其子目录下的.txt文件忽略;即/**/两颗星表示所有层目录;
-
以下为某个使用 vue-cli3 创建项目下的 .gitignore 文件内容:
.DS_Store node_modules /dist # local env files .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* # Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw?
四、查看状态
1. git status
查看工作区的状态,该命令 经常使用 ;每执行一条指令后,都应使用该命令 查看 工作区和暂存区的 状态 ; 红色 表示对文件的更改还没提交到暂存区; 绿色 表示已提交到暂存区;
五、工作区 -> 暂存区
1. git add <file>
将 工作区 中的文件提交到 暂存区 :
-
git add test.txt:将工作区中的test.txt提交到暂存区; -
git add test.txt test2.txt:将工作区中的test.txt和test2.txt提交到暂存区; -
git add .:将当前目录及其子目录下的所有文件从工作区提交到暂存区中;
六、暂存区 -> 版本库
1. git commit -m '注释'
将暂存区中的文件提交到版本库, 一定要添加注释,否则不让提交 :当注释很短时采用 -m 方式( m 为 message 的意思):
2. git commit
当注释很长时,可以直接执行 git commit ,进入 vim 编辑器界面,在此处编写较长的注释,添加完注释后,通过 wq 保存并退出即可:
3. git commit -am '注释'
表示添加当前目录下所有已被 git 追踪的文件到暂存区中并提交,即相当于是 git add . 与 git commit 两步操作的合成。
该方式只适用于已被 git 追踪的文件(即文件至少提交过一次) ,当文件第一次提交到暂存区时(此时该文件并未被 git 追踪)不可以使用该命令,而是要分开写,否则会报错:
七、工作区 <- 暂存区
简单来说,就是将 git status 指令显示出来的文件,从 绿色 变为 红色 ,大概有如下三种方法:
1. git rm --cached <file>
删除缓存区中的 <file> 文件,并将其还原到 工作区 。该指令需要对 暂存区 删除的文件进行一次提交操作,所以建议用第二种方法;
2. git restore --stage <file>
通过该指令,将文件从 缓存区 中移动到 工作区 ,这里的参数 --stage 写成 --staged 效果是一样的:
小贴士:可以使用 tab 键补全命令;
3. git reset HEAD <file>
将文件从 缓存区 中移到 工作区 ,作用与方法 2 一样:
八、撤销操作
这里指的是撤销工作区中对文件的操作,包括新增、修改、删除等,配合着前面第七点所讲的指令使用。大概有以下两种方法:
1. git checkout -- <file>
可以撤销 工作区 中对 flie 文件的改动操作(包括删除):注意 -- 后面要跟上空格:如果修改已经通过 git add 提交到 暂存区 ,该指令无效。
2. git restore <file>
可以撤销 工作区 中对 file 文件的操作,效果与方法 1 相同;
九、日志
git 的日志记录了 git 仓库对文件的所有操作,主要分为三大类:分支的 提交日志 、文件的 修改日志 、 git 的 操作日志 。通过查看这些日志信息,可以很好地了解 git 仓库的历史记录,并根据需要进行版本回退。
1.查看提交日志
使用的主要命令为 git log ,通过添加不同的参数,可以显示不同形式的提交日志,下面主要介绍其中常用的几种:
git log
查看版本库的提交( commit )历史:
-
提交历史是倒叙的,最新的提交排在最前面;
-
Git的提交id(commit id)是一个 摘要值 ,这个摘要值实际上是通过sha1算法计算出来的 不重复字符串 。由此保证了每次提交id的唯一性; -
Author显示的是提交时优先级最高的配置,比如提交时有--local配置就显示它,没有就显示--global的配置;如上图中:第二次提交时使用的是修改过后的config李四,也就是优先级更高的--local配置;
git log -n
可以查看最近的 n 次的提交历史,比如通过 git log -3 查看最近 3 次的提交历史:
git log --graph
以图形化的形式显示提交历史:
git log --pretty=oneline
以一行的形式显示提交历史:
git log --graph --abbrev-commit
通过 --abbrev-commit 对提交信息进行简化:
还可以结合 --pretty=oneline 进行简写:
git log --pretty=oneline --abbrev-commit
git log --pretty=oneline:"%h - %an, %ar : %s"
还可以按照规定的格式显示日志内容: %h :表示 commit id ; %an :表示提交人; %ar :表示提交时间; %s :表示提交信息;
2.查看修改日志
git blame file_name
如图所示,通过该命令可以清楚查看指定的文件的每次修改。包括修改用户,修改时间等;
3.查看操作日志
git reflog
通过该指令可以详细地查看,每次操作所在提交节点的 commit id ,以及在此提交节点上所执行的操作(指令);并且是倒叙显示的,即最近一次操作的序号为 {0} :
git log :只能显示 当前分支 的提交历史,如果进行版本回退,会丢失较后版本的提交信息,如下图所示:
可以看到通过 reset 进行版本回退,丢失了 4th commit 的提交信息,此时可通过 git reflog 查看操作日志的相关操作信息来回到最新的版本。
总结:
-
总体上来说,操作日志包含了修改日志和提交日志,是最全的
git日志; -
注意:不是通过
git命令,而是手动修改文件,这些修改记录不会被git日志记录。所以,推荐使用git指令进行操作;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- db2 定义分区表和分区键
- HBase漫谈 | HBase分区过多影响&合理分区数量
- 大数据开发学习之Hive的静态分区与动态分区
- 好程序员大数据培训之掌握Hive的静态分区与动态分区
- Oracle 12r2 数据库之间传输表,分区或子分区
- 将云谷IDCSystem的Xen机器上的lvm分区换成ext4分区
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mastering JavaServer Faces
Bill Dudney、Jonathan Lehr、Bill Willis、LeRoy Mattingly / Wiley / 2004-6-7 / USD 40.00
Harness the power of JavaServer Faces to create your own server-side user interfaces for the Web This innovative book arms you with the tools to utilize JavaServer Faces (JSF), a new standard that wi......一起来看看 《Mastering JavaServer Faces》 这本书的介绍吧!