Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。
下面记录一下笔者学习git的过程。
一,基本命令
1,安装git,自行百度,网上大把的流程。
2,在需要用git管理项目的文件夹中,打开Git Bash,输入:git init,会发现多了个“.git”的文件夹。
3,git首次配置,及查看个人设置。一般设置用户名称-user.name,用户邮箱-user.email,及核心编辑器-core.editor。使用git config –global配置一些参数,使用git config –list查看个人所有配置。
4,克隆现有仓库:git clone gitHub上的仓库项目路径。
5,添加文件,提交文件,查看项目下面的文件的提交状态。
git add filename // 添加文件
git commit // 提交文件(执行该命令,会自动打开你之前设置的核心编辑器,在编辑器中输入提交信息,然后保存关闭编辑器,文件就提交了)
git status // 查看文件状态
上面的git status 输出说明我的项目的工作目录下没有任何已跟综的文件被修改过。
6,若往项目添加一个新的文件。如果之前项目不存在这个文件,那么执行git status就会看到这个未跟踪的文件:
需执行git add 及 git commit命令才能让git跟踪该文件。
7,暂存已修改的文件:即该文件已经提交,现在修改了它
上面的文件,现在已经添加到了暂存区,此时若再次修改该文件,则会出现如下的结果:
可以看到,该文件同时出现在了已暂存和未暂存的列表中。这是怎么回事呢?
原因:在暂存一个文件时,git保存的是你执行git add时文件的样子。也就是说,你执行git add之后,文件的版本已经生成,若你修改了该文件,会生成新的版本,这个版本和上一个是不一样的,所已,修改前的版本出现在暂存列表,修改后的版本出现在未暂存列表。
8,显示更简洁的状态信息:git status -s
“??”:未被跟踪的新文件;
“A”:表示已暂存的新文件;
“M”:表示已修改的文件
实际上,文件列表是分两列的,左列标明了文件是否已暂存,而右列表明了文件是否已修改。
9,忽略文件
可以创建名为 .gitignore的文件,在其中列出待匹配文件的模式:
详细文档参考:https://github.com/github/gitignore
10,查看具体修改的内容:git diff。这个命令会告诉你,哪些变更还没有被暂存,哪些已暂存的变更正待提交。
11,跳过暂存区
12,移除文件
若你更改了某个文件,并且已经把它加入到索引中(已暂存),要想让git移除它就必须使用-f选项强制移除:
删除git中的某个文件时,你也许不想把它从硬盘直接删除,但是也不想让git对其进行跟踪管理,可以使用git rm –cached:
13,移动文件:git mv
14,查看提交历史:git log
加入选项 -p,它会显示每次提交所引起的差异。还可以加上 -2,只输出最近的两次提交。
可以用 –stat 查看每个提交的简要信息。
可以用 –pretty 来更改日志输出的默认格式。
可以用 –pretty=format来指定自己的输出格式。这样的输出特别有利于机器解析,你可以明确指定输出格式,其结果不会随着git版本的更新而改变。
git log –pretty=format命令的一些有用的选项:
%H 提交对象的散列值
%h 提交对象的简短散列值
%T 树对象的散列值
%t 树对象的简短散列值
%P 父对象的散列值
%p 父对象的简短散列值
%an 作者的名字
%ae 作者的电子邮箱
%ad 创作日期
%ar 相对于当前日期的创作日期
%cn 提交者的名字
%ce 提交者的电子邮箱
%cd 提交日期
%cr 相对于当前日期的提交时间
%s 提交信息的主题
oneline和format这两个选项如果和log命令的另一个选项–graph一起使用,就能发挥更大的作用。具体来说,–graph会用ASCII字符串形式的简单图表来显示git分支和合并历史。
限制提交历史的输出范围:
如:
git log -n // 只显示最新的n次提交
git log –since=2.weeks // 只输出指定日期之后的提交
git log –until=2.weeks // 只输出指定日期之前的提交
git log –author=tanwanfang // 只输出作者与指定字符串匹配的提交,这里指定字符串是‘tanwenfang’
git log –committer=tanwenfang // 只输出提交者与指定字符串匹配的提交,这里指定字符串是‘tanwenfang’
git log –grep=.txt // 只输出提交信息包含指定字符串的提交,这里指定字符串是‘.txt’
git log -Scat // 只输出包含“添加或删除指定字符串”的更改的提交,这里指定字符串是‘cat’
15,撤销操作
提交场景:提交之后才发现自己忘记提交了某些文件,或写错了某些提示信息,此时想重新提交,可以使用–amend选项。
撤销已暂存的文件:git reset HEAD filename
撤销对文件的修改:如果你发现自己不需要对文件做更改,想把文件恢复到上次提交的状态,咋办呢?需要使用:git checkout – filename
但是该条指令是条危险的指令,执行该命令,任何对该文件的修改都会丢失,因为该命令用之前的版本做了覆盖。除非你确定你确定不需要这些更改,否则不要使用这条指令。
二,远程仓库的使用
1,显示远程仓库,git remote
2,添加远程仓库:git remote add [shortname][url]
现在可以在命令行中使用SpringCloud字符串代替完整的url。
比如获取SpringCloud中有,而本地没有的,可以执行:git fetch SpringCloud
3,从远程仓库获取数据
(1)git fetch [remote-name] // 只会把数据拉取到本地仓库,并不会自动将这些数据合并到本地的工作成果中。
(2)git pull // 如果你有一个跟踪着某个远程分支的本地分支,可以使用git pull命令来自动获取远程数据,并将远程分支合并入当前本地分支。
4,将数据推送到远程仓库:git push [remote-name][branch-name]
例如:git push origin master(把本地的master分支推送到远程仓库origin服务器上)
对于改动的文件,要执行commit之后,然后执行git push才有效果。
5,检查远程仓库:git remote show [remote-name]
6,删除和重命名远程仓库:git remote rename [old-name] [new-name]
三,标记
1,例举标签:git tag
2,创建标签
git使用的标签主要有两种:
(1)轻量标签:它只是一个指向某次提交的指针。
(2)注释标签:会作为完整的对象存储在Git数据库中。
3,创建注释标签:git tag -a [tag-name] -m ‘提交信息’
执行git show命令可以看到标签数据以及对应的提交:
4,创建轻量标签:git tag [tag-name]
5,补加标签:git tag -a v1.3 [提交的校验和]
现在提交历史如下:
现在加入忘记给项目添加v1.4版本标签,而改版本对应的应该是“Update application-peer2.yml”
,你仍然可以在这时标记这次提交。只需在命令最后指定提交的校验和(或部分校验和):
git tag -a v1.4 7175de035
6,共享标签
默认情况下,git push 命令不会把标签传输到远程服务器上。若想上传,需明确指定将标签上传服务器。对应命令:git push origin [tag-name]
若想一次性上传所有还未上传的标签都上传:git push origin –tags
7 Git别名
通过git config设置每个Git命令的别名:
例如: