基本操作流程
- 创建工作目录
对工作目录进行修改 git add ./(或者文件路径,./意思就是将工作目录的所有文件都加载进去)
这个高级命令相当于执行了n次两个底层命令
①:git hash-object -w 文件路径
②:git update-index --add --cacheinfo 100644 githash值 文件名
注意:这里的 git add命令只是加入到暂存区,没有生成tree对象- git commit -m “写上注释内容”
这个高级命令相当于执行了n次两个底层命令
①:git write-tree
②:git commit-tree
注意这个基本流程,表面上我们的工作内容好像是
从工作区–>暂存区–>版本库,但是这样理解是错误的
实际的流程是这样的
我们在工作目录里面修改,然后就会生成git对象放在版本库里面,
然后从版本库里面拿去到暂存区,然后从暂存区里面生成树对象放在
版本库里面,然后在从版本库里面拿出来进行封装生成提交对象再放回版本库
所以说git是很安全的,就算你工作目录交到暂存区了,但是你没有提交,git一样是帮你管理,记录的.
高层命令
- 初始化新仓库 :git init
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:git init 作用:初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要 的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。 - 记录每次更新到仓库的状态
工作目录下面的所有文件有两种状态:已跟踪 或 未跟踪
已跟踪的文件有三种状态:已提交,已修改或者已暂存
已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它 们的记录,就是通过了git add这条命令操作过的文件
所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在 当前的暂存区域,就只是在工作目录的文件,没有通过git add命令操作过 - 检查当前文件状态 : git status
①:未跟踪文件
如果创建一个新文件janev1.txt,保存退出后运行 git status 会看到该文件出现 在未跟踪文件列表中,如下图:
在状态报告中可以看到新建的 jane v1.txt文件出现在“Untracked files”下 面。未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;Git 不 会自动将之纳入跟踪范围,除非你明明白白地告诉它“我需要跟踪该文件”,因 而不用担心把临时文件什么的也归入版本管理。
②:跟踪文件的已暂存状态
如果这个文件被git add执行过,就从未跟踪文件变成跟踪文件的暂存状态,如下图:
只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中。在 git add 后面可以指明要跟踪的文件或目录路径。如果是目录的话,就说明要递归 跟踪该目录下的所有文件。(译注:其实 git add 的潜台词就是把目标文件快 照放入暂存区域,也就是 add file into staged area,同时未曾跟踪过的文件标 记为已跟踪。)
③:跟踪文件的已修改状态
这个janev1.txt已经是已暂存的状态,若是这时我们将这个文件的内容修改一下,再看它的状态,就会:
janev1.txt文件出现了两次!一次算已修改,一次算已暂存,实际上 Git 只不过暂存了你运行 git add 命令时的版本,如果现在提交,那 么提交的是添加注释前的版本,而非当前工作目录中的版本。所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来.
**查看已暂存和未暂存的更新 **
git status 的显示比较简单,仅仅是列出了修改过的文件,
如果要 查看具体修改了什么地方,可以用 git diff 命令.
这个命令它已经能解决我们 两个问题了:
当前做的哪些更新还没有暂存?
有哪些更新已经暂存起来准备 好了下次提交?
- 当前做的哪些更新还没有暂存?,
命令:git diff(不加参数直接输入 git diff)
- 有哪些更新已经暂存起来准备好了下次提交?
命令: git diff --cached 或者 git diff --staged(1.6.1 以上)
④:跟踪文件的已提交状态
命令:git commit
注意:
这种方式会启动文本编辑器以便输入本次提交的说明 默认的提交消息包含最后一次运行 git status 的输出,放在注释行里, 另外开头还有一空行,供你输入提交说明。你完全可以去掉这些注释行, 不过留着也没关系,多少能帮你回想起这次更新的内容有哪些。
另外也可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新:
命令:git commit –m “message xxx”
提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态, 可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照, 以后可以回到这个状态,或者进行比较
**跳过使用暂存区域 **
尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁 琐。Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交, 从而跳过 git add 步骤
git commit -a //vim文本编写器写注释
git commit -a -m “注释” //在后面写注释
删除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中注册删除(确切地说, 是在暂存区域注册删除),然后提交.
- 就是在工作目录里面删除文件,可以手动删除,也可以使用命令行rm 文件名 进行删除
- 此时如果运行git status就会显示
显示的是jane.txt文件进行了已修改还没进行暂存,若我们将它进行暂存
现在发现就是暂存区里面本来有一个jane.txt的,现在没有了,其实就是删除了暂存区里面的东西,但是我们将这个暂存区进行一次提交的话,就会向版本库里面增加一个没有jane.txt的tree对象和没有jane.txt的提交对象,对于删除文件,版本库是增加内容的,之前保存的jane.txt的git对象是不会被删除的
上面也可以简化成一个命令:git rm 文件名
文件改名
文件改名也是相当于删了原本的文件,加入新名字的文件
注意:上图的git add ./ 然后你不是写这个将全部提交的代码,就要改写成要加入两个东西进入暂存区
分别是:git add jane.txt 和git add janejing.txt
也可以一步写成:
其实,运行 git mv 就相当于运行了下面三条命令:
mv 1.txt 2.txt
git rm 1.txt
git add 2.txt
查看历史记录
git log //将所有的提交对象进行显示,有提交人,时间,提交对象hash值
参数
git log --pretty=oneline //这样子好看很多
git log --oneline //这样子更加清晰