曾经听到过这样一句话:不会「git」就不要敲代码了。细细品味确实有其中的道理,可能是当事人代码被强行覆盖后的叹息吧!
因此,为了避免这种情况,接下来我们就一起来好好学习「git」的相关知识吧!不怕你不会,就怕你不看!
它们之间的关系为:
通过「git status」查看「git」状态时,「红色」的文件表示在「工作区」;「绿色」的文件表示在「暂存区」:
工作区中的文件只要通过「git add」命令添加进了「Git」仓库,就会被追踪。
❝暂存区也称为「index」,不过常使用「stage」表示。❞
详见《「Git常用命令整理」》
可以通过三个地方的三个文件设置git配置参数,分别代表三个不同的作用域:
git config --system
git config --global
git config --local
可使用「git config」 查看相关操作命令以及提示:
「user.name」和「user.email」指的是用户名和邮箱,这些两个配置会被添加到提交信息中,可以搭配上述命令配置到三种作用域中:
git config --local user.name "张三"
git config --local user.email test1@git.com
以上为配置特定版本库(mygit)的用户和邮箱:这样配置就可以通过两个版本库来进行多人操作的模拟;
git config --global user.name "张三哥哥"
git config --global user.email test2@git.com
git config --system user.name "张三爸爸"
git config --system user.email test3@git.com
可以看到输出的配置信息是「仓库配置」张三,验证了仓库配置的「优先级最高」;
git config --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,验证了用户配置「优先级第二」和系统配置「优先级第三」;
我们可以通过git提供的.gitignore文件配置不被git跟踪的文件。被添加到.gitignore文件中的文件名,将不会被git追踪。如下图中的新增文件「setting.properties」:
可见在.gitignore(注意文件是官方规定好了的不能随便乱改)文件中添加了文件名setting.properties后,git便不再追踪setting.properties这个文件了;
通常用来忽略本地开发中的下列文件:
只要与.gitignore中内容相匹配的目录或文件就会被git忽略;再如:
❝.gtiignore文件非常重要,一般放在创建项目的根目录上。❞
注意在.gitignore文件中一行写一个文件名;.gitignore文件也支持正则表达式比如:
以下为某个使用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?
其实我们不需要每次都手写一遍.gitignore文件,可以通过这个网站自动生成不同语言项目的忽略文件:「http://gitignore.io/」
在输入框中输入相关语言标签,就可以自动生成忽略文件列表。可以将它作为参考,选择其中需要的添加到.gitignore文件中:
.gitignore失效
「原因」:.gitignore只能忽略那些原来没有被追踪(untrack)的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
「解决方案」:清除git本地缓存,将文件转变为untrack状态,然后再提交:
git rm -r --cached .
git add .
查看工作区的状态,该命令「经常使用」;每执行一条指令后,都应使用该命令「查看」工作区和暂存区的「状态」;「红色」表示对文件的更改还没提交到暂存区;「绿色」表示已提交到暂存区;
将「工作区」中的文件提交到「暂存区」:
将暂存区中的文件提交到版本库,「一定要添加注释,否则不让提交」:当注释很短时采用-m方式(m为message的意思):
当注释很长时,可以直接执行git commit,进入vim编辑器界面,在此处编写较长的注释,添加完注释后,通过wq保存并退出即可:
表示添加当前目录下所有已被git追踪的文件到暂存区中并提交,即相当于是git add . 与 git commit 两步操作的合成。
「该方式只适用于已被git追踪的文件(即文件至少提交过一次)」,当文件第一次提交到暂存区时(此时该文件并未被git追踪)不可以使用该命令,而是要分开写,否则会报错:
简单来说,就是将git status指令显示出来的文件,从「绿色」变为「红色」,大概有如下三种方法:
删除缓存区中的< file>文件,并将其还原到工作区。该指令需要对暂存区删除的文件进行一次提交操作,所以建议用第二种方法;
通过该指令,将文件从「缓存区」中移动到「工作区」,这里的参数--stage写成--staged效果是一样的:
❝小贴士:可以使用tab键补全命令; ❞
将文件从「缓存区」中移到「工作区」,作用与方法2一样:
这里指的是撤销工作区中对文件的操作,包括新增、修改、删除等,配合着前面第七点所讲的指令使用。大概有以下两种方法:
可以撤销「工作区」中对flie文件的改动操作(包括删除):注意--后面要跟上空格:如果修改已经通过git add提交到「暂存区」,该指令无效。
可以撤销「工作区」中对file文件的操作,效果与方法1相同;
git的日志记录了git仓库对文件的所有操作,主要分为三大类:分支的「提交日志」、文件的「修改日志」、git的「操作日志」。通过查看这些日志信息,可以很好地了解git仓库的历史记录,并根据需要进行版本回退。
使用的主要命令为git log,通过添加不同的参数,可以显示不同形式的提交日志,下面主要介绍其中常用的几种:
git log
查看版本库的提交(commit)历史:
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:表示提交信息;
git log --all --decorate --oneline --graph
该命令比较厉害,是StackOverflow上网友组装的命令,可以一次性查看所有分支及其提交记录,非常实用:
如上图所示,三个分支dev、master、test以及每个分支的提交记录都一次性显示出来了。由于该命令十分常用,但是又很长,不好记忆。所以,我们可以给该命令设置别名(alias),比如取该命令的首字母组成别名dog,在全局下进行配置:
git config --global alias.dog 'log --all --decorate --oneline --graph'
设置好别名之后,就可以通过git dog来执行这条指令了。有关别名的内容,之后会详细进行讲解。
git blame file_name
如图所示,通过该命令可以清楚查看指定的文件的每次修改。包括修改用户,修改时间等;
git reflog
通过该指令可以详细地查看,每次操作所在提交节点的commit id,以及在此提交节点上所执行的操作(指令);并且是倒叙显示的,即最近一次操作的序号为{0}:
git log:只能显示当前分支的提交历史,如果进行版本回退,会丢失较后版本的提交信息,如下图所示:
可以看到通过reset进行版本回退,丢失了4th commit的提交信息,此时可通过git reflog查看操作日志的相关操作信息来回到最新的版本。