目前这个阶段,正在学git,所以将学习的内容总结总结,写成博客,之后也好查看。
一些基础知识
注意在Git中,文件处于三种状态之一:已提交(committed)、已修改(modified)、已暂存(staged)。
已提交:是数据已经存入本地数据库中。
已修改:是已经改动了文件,但尚未提交到数据库中。
已暂存:对已修改文件的当前版本做出了标识并将其加入下一次要提交的快照中。
Git项目中有三个主要的区域:Git目录、工作目录、暂存区。
Git目录:是Git保存项目元数据和对象数据库的地方。是Git最重要的部分,也是从其他计算机中克隆仓库时要复制的内容。
工作目录:是项目某个版本的单次检出。这些文件从Git目录下的压缩数据库内被提取出,放置在磁盘上以供使用或修改。
暂存区:是一个文件,一般位于Git目录中。它保存了下次所要提交内容的相关信息。也被称为“索引”。
Git的基本工作流如下:
(1):修改工作目录中的文件;
(2):暂存文件,将这些文件的快照加入暂存区;
(3):提交暂存区中的文件,将快照永久地保存在Git目录中;
如果一个文件的某个特定版本出现在Git目录中,该版本的文件就被认为处于已提交状态。
如果这个文件已被修改,并且已被放入暂存区,那么它就处于已暂存状态。
如果在上次检出之后文件发生了变更,但并没有被暂存,则处于已修改状态。
一、获取Git仓库
方法有两种:1:把现有的项目或者目录导入到Git中。2:从服务器上克隆现有的Git仓库。
1.1从现有目录中初始化Git仓库
要想在Git中对现有项目进行跟踪管理,只需进入项目目录,输入
$ git init
这会创建一个名为 .git的子目录。这个子目录包含了构成Git仓库骨架的所有必需文件。但是此刻Git尚未跟踪项目中的任何文件。
1.2克隆现有的仓库
比如:从https://github.com/lazyparser/weloveinterns这个网址中克隆一个仓库,输入命令即可。
$ git clone https://github.com/lazyparser/weloveinterns
二、在Git仓库中记录变更
工作目录下的每一个文件都处于两种状态之一:已跟踪、未跟踪。
已跟踪的文件:是指上一次快照中包含的文件。这些文件又可以分成未修改、已修改、已暂存。
未跟踪的文件:除去已跟踪的所有文件。即不在上一次快照中,也不在暂存区中的文件。
2.1查看当前文件状态
$ git status 检查文件所处状态的命令
$ echo 'My Project' > README 例如将README这个文件添加到项目中。执行此命令
此时,README是处于未跟踪的状态(之前项目中不存在这个文件)
2.2跟踪新文件
$ git add README 开始跟踪README文件。
在“changes to be commited"标题下列出的就是已暂存的文件。
2.3忽略文件
很多时候,如果不希望某一类文件被Git自动添加,则可以创建名为.gitignore的文件
GitHub维护了一份相当全面的.gitignore参考示例列表,可以访问点击打开链接
2.4查看已暂存和未暂存的变更
使用git diff 命令。它主要解决两个问题:1哪些变更还没有被暂存? 2哪些已暂存的变更正待提交?
$ git diff --staged 命令是有哪些已暂存的内容会进入下一次提交。这条命令会将暂存的变更与上一次提交的内容相比较
$ git diff 命令显示出你具体添加和删除了哪些行
2.5提交变更
$ git commit 这条命令就是提交
提交时记录的是暂存区中的快照。任何未暂存的内容仍然保持着已修改状态,
2.6跳过暂存区
$ git commit -a选项 ,就可以让Git自动把已跟踪的所有文件添加到暂存区,然后再提交。
2.7移除文件
这里是将文件从工作目录中移除,并且会将移除状态记录到暂存区
$ git rm 文件
如果更改了某个文件,并已经把它加入到了索引当中(已暂存),要想让Git移除它就必须使用-f选项强制移除,这是为了防止没有被记录到快照中的数据被意外移除而设立的安全特性,因为这样的数据被意外移除后无法由Git恢复。
$git rm --cached README 你可以将文件、目录和文件的glob模式传递给git rm命令。
$git rm log/\*.log 此命令会移除log目录中所有扩展名为.log的文件
$ git rm \*~ 此命令会移除所有以~结尾的文件
2.8移动文件
$ git mv file_from file_to 重命名文件
三、查看提交历史
使用git log命令来查看历史记录
$ git log -p -2 只输出最近的两次提交信息。
四、撤销操作
$ git commit --amend 这种是适用于提交之后发现自己忘了添加某些文件,或者写错了提交信息的情况下.