1.Git入门
1.1 什么是版本控制?
版本控制是一套系统,该系统按时间顺序记录某一个或一系列文件的变更,让你可以查看其以前的特定版本。
1.2 版本控制器的分类?
常用的版本控制器分为:集中式版本控制系统(简称CVCS)和分布式版本控制系统(简称DCVS)
1.3 Git简史
Git诞生于2005年,采用分布式版本控制系统,经过多年的不断发展,日趋成熟易用。
1.4 Git的完整性
Git中的所有数据在存储前都会执行校验和计算,随后以校验和来引用对应的数据。这意味着不可能在Git不知情的情况下更改文件或目录的内容。
Git所采用的校验和机制叫做SHA-1散列。这是一个由40个十六进制字符(0~9和a~f)所组成的字符串,它根据文件内容或Git的目录结构计算所得到的。
1.5 Git的三种状态
在Git中,文件可以处于一下三种状态之一:已提交(commited)、已修改(modified)和已暂存(staged)。
已提交表示数据已经被安全地存入本地数据库中;
已修改表示已经改动了文件,但尚未提交到数据库;
已暂存表示对已修改文件的当前版本做出了标识并将其加入下一次要提交的快照中。
2.Git的首次配置
2.1 设置用户身份
安装好Git后的第一件事就是设置用户名和电子邮件地址,这一步非常重要。
设置命令如下:
$ git config --global user.name “John Doe”
$ git config --global user.email johndoe@example.com
2.2 个人编辑器
设置好身份信息之后就可以配置默认的文本编辑器了,当Git需要输入消息的时候会用到这个编辑器。如果没有配置,Git会使用默认的编辑器。
Vim、Emacs、Notepad++编辑器的配置命令详见各个编辑器的官网
2.3 检查个人设置
命令如下:
$ git config --list
该命令可以列出当前Git可以找到的所有设置。
也可以通过键入gir config来查看Git中当前某个键的值。
例如: git config user.name 就可以查看当前电脑的配置的用户姓名。
2.4 获取帮助
如果在使用Git的过程中需要帮助,有以下三种方法可以查看Git任何命令的帮助页面。
命令如下:
$ git help
$ git--help
$ man git --help
3.Git基础
3.1 获取Git仓库
建立Git项目的方法主要有两种:
① 把现有的项目或者目录导入到Git中;
② 从服务器上克隆现有的Git仓库
3.2 在现有目录中初始化Git仓库
要想在Git中对现有项目进行跟踪管理,只需进入项目目录并输入:
$ git init
会创建一个名为.git 的子目录,这个目录包含了构成Git仓库骨架的所有必须信息。
3.3 克隆现有仓库
如果需要获取现有仓库的一份副本,可以使用git clone 命令。
因为Git会对服务器仓库的几乎所有数据进行完整复制,而不只是复制当前工作目录。
git clone 默认会从服务器上把整个项目历史中每个文件的所有历史版本都拉取下来。
命令如下:
$ git clone [URL]
git 可以用几种不同的协议传输数据,包括:https:// 协议 git:// 协议或者是SSH传输协议。
3.4 在Git仓库中记录变更
3.4.1 查看当前文件状态
检查文件所处状态的主要工具是 git status 命令。
3.4.2 跟踪新文件
可以使用git add命令让Git开始跟踪新的文件。
git add 是一个多功能命令,既可以用来跟踪新文件,也可以用来暂存文件,它还可以做其他的一些事,比如把存在合并冲突的文件标记为已解决。
所以,把git add命令看成“添加内容到下一次提交中”而不是“把这个文件添加到项目中”,更有助于理解该命令。
3.4.3 显示更简洁的状态信息
Git提供了一个显示简短状态的命令选项,是你可以以一种更为紧凑的形式查看变更。
执行git status - -s 或者 git status - -short 就可以看到类似下面的效果。
此时,未被跟踪的新文件旁边会有一个?? 标记,已暂存的新文件会有A标记,而已修改的文件则会有一个M标记。
3.4.4 忽略文件
很多时候,你不希望某一类文件被Git自动添加,甚至不想这些文件被显示在未跟踪的文件列表下面。这些文件一般是自动生成的文件(比如日志文件)或是有构建系统创建的文件。
在这种情况下,可以创建名为.gitignore的文件,在其中列出待匹配文件模式。最好在开始工作前配置好.gitignore文件,这样就不会意外的把不想纳入Git仓库的文件提交进来了。
可以写入.gitignore文件中匹配模式规则如下:
空行或者以#开始的行被忽略
支持标准的glob模式
以斜杠(/)开头模式可用于禁止递归匹配
以斜杠(/)结尾的模式表示目录
以感叹号(!)开始的模板表示取反
3.4.5 提交变更
此时,你的暂存区已经准备妥当,可以提交了。
请记得所有未暂存的变更都不会进入到提交的内容中,这包括任何在编辑之后没有执行git add命令添加到暂存区的新建或者修改过的文件。
命令如下:
方式一:git commit;(不推荐)
方式二:git commit -m “添加内容或者修改内容简短说明”
请记住:提交时记录的是暂存区中的快照。任何未暂存的内容仍然保持着已修改状态。
3.4.6 跳过暂存区
如果你想要跳过暂存区直接提交,Git为你提供了更快捷的途径。
给git commit命令传入 -a选项,就能让Git自动把已跟踪的所有文件添加到暂存区,然后再提交,这样就不用再执行 git add了。
命令如下:
git commit -a -m “添加内容或者修改内容简短说明”
3.4.7 移除文件
要从Git中移除某个文件,需要把它先从已跟踪文件列表中移除(确切的说,是从暂存区中移除),然后再提交。
命令如下:
$ git rm <file>…
git rm会帮你完成这些操作,另外该命令还会把文件从工作目录中移除。如果你更改了某个文件,并已经把它加入到了索引当中(已暂存),要想让Git移除它就必须使用-f选项强制移除。这是为了防止没有被记录到快照中的数据被意外移除而设立的安全特性,因为这样的数据被意外移除后无法有Git访问。
你也许想将文件保留在硬盘上,但不想让Git对其进行跟踪管理,只需使用 --cached选项即可;
命令如下:$ git rm --cached <file>…
3.4.8 移动文件(重命名文件)
Git与很多其他版本控制系统不同,它并不会显式跟踪文件的移动,如果你在Git中重命名了文件,仓库的元数据并不会记录这次重命名操作,不过Git能推断出究竟发生了什么
命令如下:$ git mv file_from file_to
例如:$ git mv readme.md readme
4.常用命令
在完成了几次提交或者克隆了一个已有提交历史的仓库之后,可能想要看看历史记录,可以使用git log命令来实现
4.1 撤销操作
有一种撤销操作的常见使用场景是提交之后才发现自己忘了添加某些文件,或者写错了提交信息。如果这时你想重新尝试提交。可以使用- -amend选项:
$ git commit --amend
该命令会提交暂存区的内容。
4.2 撤销已暂存的文件
举例来说:假设你更改了两个文件,想要分两次提交,却不小心键入了git add *,把这两个文件都添加到了暂存区。这时你改如何把它们从暂存区移除呢?
可以使用如下命令:
命令格式:$ git reset HEAD <file>...
4.3 撤销对文件的修改
如果你突然发现,自己不再需要对某个文件所做的更改,这时该怎么办?
可以使用如下命令:
命令格式:$ git checkout - -<file>...
注意:该命令是一条危险命令,除非你确信不再需要这些文件,否则不要使用这个命令。
4.4 将数据推送到远程仓库
当你的项目进行到某个阶段,就要把变更推送到远程仓库与他人分享。
此时用到的命令格式如下:
$ git push [remote - name] [branch - name]
注意:上述命令恩能够正常工作的前提是必须拥有克隆下来的远程仓库的写权限,并且克隆后没有任何其他人向远程仓库推送过数据。
4.5 检查远程仓库
要查看关于某一远程仓库的更多信息,可以使用git remote show [remote - name]命令。
4.6 删除和重命名远程仓库
重命名命令格式:
$ git remote rename 仓库旧名称 仓库新名称
删除命令格式:
$ git remote rm 仓库名称
5.Git分支机制
5.1 创建新分支
命令格式如下:
$ git branch [branchname]
分至建立之后,可以使用如下命令查看各个分支当前所指向的对象:
$ git log --oneline --decorate
5.2 切换分支
命令格式如下:
$ git checkout [branchname]
使用命令:$ git log --oneline --decorate --graph --all 会输出提交历史,显示出分支的指向以及项目历史的分叉情况。
上述分支的创建与切换可以用如下命令格式替代:
$ git checkout -b [branchname]
在分支上开发完毕并提交之后,然后合并到主分支的步骤:
① 从分支回到master分支
② 再合并
命令格式如下:
$ git checkout master
$ git merge [branchname]
5.3 删除分支
命令格式如下:
$ git branch -d [branchname]
把新建分支合并到master之后,需要删除之前新建的分支,原因是此时的分支已经没有用了。
可执行上述删除分支命令,然后再提交即可
5.4 分支管理
git branch 命令并不只是可以用来创建和删除分支。如果执行不带参数的git branch 命令,就会得到当前所有分支的简短列表。
此时应注意分支前面的*字符,它表明你的项目当前所在的分支。(即HEAD指向的分支)
要查看每个分支上的最新提交,可以使用$ git branch -v命令
也可以使用如下命令:
命令格式:
$ git branch --merged
注释:此命令用来筛选已并入当前分支的所有分支
命令格式:
$ git branch --no - merged