1.Git基础
1.1 给你一个选择Git而不是SVN的理由
- Git是分布式的,SVN不是。(最核心的区别)
- Git按照元数据方式存储内容,SVN按文件存储:所有的资源控制系统都是将文件的元信息隐藏在一个类似SVN,CVS的文件里。
- Git和SVN的分支不同:分支在SVN中仅代表版本库中的另外一个目录。
- Git没有全局版本号,而SVN有。
- Git的内容完整性优于SVN:Git的内容存储使用的是SHA-1哈希算法,确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
1.2 Git安装
下载地址:https://gitforwindows.org/
1.3 Git工作流程
- 克隆 Git 资源作为工作目录。
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
2.基本操作
2.1 获取Git仓库
(1)创建Git仓库——git init
在Demo项目中创建Git仓库,红框标出的位置表明在F:/Demo/.git/目录初始化空Git仓库完毕。
(2)克隆现有仓库——git clone [url]
拷贝一个Git仓库到本地,达到可以查看该项目或者对其进行修改的目的。
克隆之后用”ls”查看,会发现Demo项目中多了一个“BXTwebsite”的文件。
git clone [url] [newName]
改变克隆项目名称(重命名)
克隆“BXTwebsite”项目,并重命名为“clover”。
2.2 记录每次更新到仓库
(1)git add
跟踪文件(将文件添加至缓存)
(2)git status
查看文件当前的状态
git status -s
状态简览
(3)git diff
查看文件更新修改信息
git diff
命令可以回答两个问题:一是当前做的哪些更新还没有暂存;二是哪些更新已经暂存起来等待下次提交。
-
git diff
查看未暂存文件的修改更新 -
git diff --cached
git diff --staged
查看已暂存文件的修改更新 -
git diff HEAD
查看已暂存文件与未暂存文件的所有修改 -
git diff – stat
显示摘要而非整个diff
追踪文件、查看文件状态、获得简短的文件状态示例:
- 添加README和test.py两个文件,查看文件当前状态
图中“1”代表我们新建两个名为”README”和”test.py”的文件,使用git status -s
命令查看文件当前状态,“??”说明文件当前尚未添加到缓存中。
执行git add README test.py
命令后,再查询文件当前状态(git status),两个文件已被添加(“A”表示文件已被添加)。
在test.py中添加“123456”并保存退出后,再执行git status -s
,出现“AM test.py”,“AM” 状态的意思是该文件在我们将它添加到缓存后有所改动。改动后再执行git add
命令将它添加到缓存。
git diff 和 git diff –-cached的示例:
- 在Demo目录中创建README和hello.php文件,vim打开README文件添加“测试”内容后添加至缓存,查看状态;
- vim打开hello.php文件添加“<?php echo ‘www.baidu.com’; ?>”内容后尚未添加至缓存,查看状态;
git diff
查看尚未缓存的改动,结果如图中1所示;git add
将hello.php添加至缓存后,git diff –-cached
查看已缓存的改动,结果如图中2所示。
(4)git commit
将缓存区内容添加到仓库中(git add 将快照内容写入缓存区)
每一次提交git都会记录名字和邮件地址,所以需要提前配置用户名和邮箱地址(可以在安装完git后就进行配置,只需配置一次)。提交前先用git status
命令检查文件内容是否都已暂存。
操作命令:
-
配置用户名和邮箱
git config --global user.name“牧心”
git config --global user.email 280942919@qq.com”
-
git config –list
检查配置信息 -
git status -s
(若有未缓存的要用git add追踪文件) -
git commit
提交
输入提交命令后,会打开一个编辑器(vim、emacs、notepad++),可以填写提交说明,比如你修改了什么…
综述:如果git安装完就进行配置,此处无需再配置;若觉得上述提交步骤过于繁琐,可直接使用git commit -a
,这样Git会自动将所有已跟踪过的文件暂存起来一并提交,从而跳过git add
步骤。
(5)git rm <file>
移除文件
要从Git中移除文件,必须从已跟踪文件清单中移除(从暂存区移除),使用git rm命令可以从工作目录中删除指定文件,使文件不再出现在跟踪文件清单中。
-
git rm --cached
只在Git仓库中删除文件(从暂存区移除),仍保留在工作目录中 -
git rm log/\*.log
删除log/目录下扩展名为.log的所有文件
(6)git mv [原文件名][新文件名]
移动文件(重命名)
示例:将“123.txt”文件重命名为“test”
git mv 123.txt test等同于执行mv 123.txt test和git rm 123.txt及git add test三条命令。
2.3 查看提交历史
(1)git log
查看提交历史
git log
会按照提交时间列出所有更新,最近的更新在最上面,会列出每个提交的SHA-1校验和、作者名字、电子邮件地址、提交时间及提交说明。
(2)git log
的常用选项
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个更新之间的差异 |
- -stat | 显示每次更新的文件修改统计信息 |
- -shortstat | 只显示–stat中最后的行数修改添加移除统计 |
- -name-only | 仅在提交信息后显示已修改的文件清单 |
- -name-status | 显示新增、修改、删除的文件清单 |
- -abbrev-commit | 仅显示SHA-1的前几个字符,而非所有的40个字符 |
- -relative-date | 使用较短的相对时间显示 |
- -graph | 显示图形表示的分支合并历史 |
- -pretty | 使用其他格式显示历史提交信息。可用选项包括online、short、full、fuller和format(后面加指定格式) |
(3)限制git log输出的选项
选项 | 说明 |
---|---|
-(n) | 仅显示最近的n条提交 |
- -since,- -after | 仅显示指定时间之后的提交 |
- -until,- -before | 仅显示指定时间之前的提交 |
- -author | 仅显示指定作者相关的提交 |
- -committer | 仅显示指定提交者相关的提交 |
- -grep | 仅显示含指定关键字的提交 |
- -S | 仅显示添加或移除了某个关键字的提交 |
例如:查看2018.9.24到2018.9.26之间,牧心提交的文件
git log –author=“牧心”–since=“2018.9.24”–before =“2018.9.26”
3.Git分支
3.1 分支管理
git branch(branchname)
新建分支git branch -d(branchname)
删除分支git checkout(branchname)
切换分支git merge(branchname)
合并分支
3.2 分支管理工具
git branch
获得包含当前所有分支的一个列表git branch -V
查看每个分支的最后一次提交git branch --merged
查看有哪些分支已合并到当前分支
git branch –no-merged
查看未合并到当前分支的分支
4.Git远程仓库(以github作为远程仓库为例)
4.1 添加远程库
(1)添加远程仓库 git remote add [名字][url]
(2)生成SSH Key ssh-keygen -t rsa -C [github注册邮箱]
,默认一路回车,成功后会在~/下生成.ssh文件夹,打开id_rsa_pub,复制里面的key。
(3)打开github,进行如下操作:
点击New SSH Key按钮,title随意填,Key中粘贴上id_rsa_pub里面的key。
添加成功后如下图所示:
可以使用命令ssh -T git@github.com 验证是否成功,出现如下界面(出现红框标出内容即成功)表示成功
(4)新建仓库并推送
创建成功后显示下图信息:
该信息说明我们可以把本地仓库内容推送至github仓库,也可以从这个仓库中克隆出新的仓库。根据github的提示,在本地仓库运行命令:
$ mkdir gitTest
$ cd gitTest
$ echo”#测试”>>README.md
$ git init
$ git add README.md
$ git commit -m”添加 README文件”
$ git remote add origin git@github.com:280942919/gitTest.git
$ git push -u origin master
然后返回github创建的仓库,可以看到文件已上传至github:
4.2 查看当前的远程库
git remote
查看当前配置有哪些远程库git remote -V
看到每个别名的实际链接地址
4.3 提取远程仓库
git fetch
从远程仓库下载新的分支与数据git merge
从远程仓库提取数据并尝试合并到当前分支
4.4 推送至远程仓库
git push [alias] [branch]
将[branch]分支推送成为[alias]远程仓库上的[branch]分支
4.5 删除远程仓库
git remote rm[别名]