本文共 3611 字,大约阅读时间需要 12 分钟。
本文git为1.9.6版本:
一、git全局配置
二、git初始化本地仓库
三、git文件状态详解
四、git文件撤销、恢复操作
git提交流程层次如下:
git repository 视为线上code集中管理服务器;也就是我们的code最后的位置;
git staging area 视为我们本地的code集中管理服务器,可认为code的中间的暂留区(以相对repository来说);
git working directory 视为我们本地编辑的code,也就是代码编辑处;
1:全局配置
1 2 3 4 5 | leo@LEO-PC /d/User/leo/Desktop/git (master) $ git config --global user.name "lansgg" leo@LEO-PC /d/User/leo/Desktop/git (master) $ git config --global user.email "coffee_lanshan@sina.com" |
这里配置 --global选项其实就是在修改家目录下的.getconfig文件
如我的:
1 | C:\Users\leo\.getconfig |
内容:
1 2 3 4 5 6 7 8 | [user] name = lansgg email = coffee_lanshan@sina.com [color] ui = true [core] autocrlf = true excludesfile = C:\\Users\\leo\\Documents\\gitignore_global.txt |
当我们修改此文件,比如将name=test (内容已经修改)
1 | $ git config --get user.name |
这里的用户名及邮件地址都是在提交代码的时候进行标识的,显示提交人的信息;
2:初始化本地git仓库
本地新建一个目录;执行git init ;
1 2 | $ mkdir git $ git init |
执行后的变化就是多了一个.git目录;
1 2 3 4 5 6 7 | leo@LEO-PC /d/User/leo/Desktop/git (master) $ ls -a .git . COMMIT_EDITMSG config hooks info objects .. HEAD description index logs refs leo@LEO-PC /d/User/leo/Desktop/git (master) $ |
.git 目录,其中存放的是我们所提交的文档索引内容,Git 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。.git目录位于工作目录内。
index(索引):将工作目录下所有文件(包含子目录)生成快照,存放到一个临时的存储区域,Git 称该区域为索引。
3、git文件状态详解
3.1、现在新建我们的code;
1 2 3 4 5 6 | leo@LEO-PC /d/User/leo/Desktop/git (master) $ touch README.txt leo@LEO-PC /d/User/leo/Desktop/git (master) $ cat hello.rb puts "hello world!" |
我们要将he.rb 、README 提交到本地git repository;
3.2、首先查看文件的状态
1 | $ git status |
或
1 | $ git status -s |
根据输出信息可以看出,README.txt hello.rb 两个文件处于master branch(主分支),这两个文件处于未追踪文件,也就当我们执行git commit(用于提交到图中的仓库)命令的时候不会将他们提交到git repository;
上图 -s 表示简要信息;( ?? )两个问号也有很重要的意义;
第一个 ? 主要表示staging area 和 repository 两个区域间的文件变化,一般会有两个字母来表示(A、M <绿色>);A 表示此文件已经是在追踪文件,M 表示此文件已经在staging area区域修改,还没有提交到repository。
第二个 ? 主要表示working directory 和 staging area 两个区域间的文件变化,M <红色> 表示此文件已经working directory区域修改,还没有提交到staging area
下面开始演示:git add 表示将文件进行追踪;
1 2 | $ git add README.txt $ git add hello.rb |
再次查看文件状态
1 | $ git status -s |
可以看到两个文件已经处于 A 状态 (追踪)现在这两个文件处于staging area区域; changes to be committed 可以进行提交了;输出信息提示,可以使用git reset HEAD <file> 将文件恢复于未追踪状态;
恢复到已经追踪的状态,进行提交测试;
1 | $ git commit -m "first commit" #-m 表示提交此代码时进行描述;我们这里描述为“first commit” |
可以看到wording directory clean 已经将此两个文件提交到repository;(从staging area区域),并查看文件状态时,不在输出任何东西
3.2 修改本地code,再查看文件状态
1 | $ echo 'puts "hello world!" ' >> hello.rb |
1 | $ git status -s |
第二个 ? 的地方出现了M <红色> 表示此文件已经在working directory区域修改;输出信息提示,hello.rb文件已经modified ; 命令 git add && git checkout && git commit -a (图示都有) 下面讲;
如何将此文件提交到repository
1 2 | $ git add hello.rb $ git commit -m "second commit" hello.rb |
或者使用:
1 | $ git commit -a -m "second commit" |
此命令将跳过git add 这一步~
4、撤销、恢复
4.1、修改本地working directory 的code ;然后撤销修改,也就说从staging area区域取出此code覆盖当前working directory的code;
测试如下:
1 2 3 4 | $ echo 'puts "hello world!"' >> hello.rb #修改本地code $ git status -s #查看文件的状态,有差异 $ git checkout hello.rb #从staging area区域取出此code $ git status -s #再次查看该文件的状态,无差异,并且代码恢复到了之前的代码 |
4.2、修改本地working directory的code,并且进行追踪(add 到 staging area区域);然后我们想撤销本地code的修改,那我们可以从repository仓库拉出此code覆盖到staging area,然后再从staging area区域取出覆盖到working directory区域;测试如下:
1 2 3 4 5 6 7 8 | $ echo 'puts "hello world!"' >> hello.rb $ git status -s $ git add hello.rb $ git status -s $ git reset hello.rb $ git status -s $ git checkout hello.rb $ git status -s # 每一步都进行了文件状态差异的核对; |
我们也可以不用这么麻烦,可以直接从 repository 区域拉取出来直接覆盖到 working directory 区域:
1 2 3 4 5 6 | $ echo 'puts "hello world!"' >> hello.rb $ git status -s $ git add hello.rb $ git status -s $ git checkout HEAD hello.rb $ git status -s |
可以看到已经从git repository 拉取此文件并进行了覆盖~
转载地址:http://ouanx.baihongyu.com/