git note 摘自《git权威指南》

 

目录:

一、

1.git diff 命令


二、

1.git 工作区-stage-版本库 关系

2.git 对象库

3.git 版本库与对象库关系


三、

1.git reset

2.git checkout

3.git stash 命令


四、git基本操作

1.删除

2.移动

 

 

git diff命令

git diff :显示工作区的最新改动,即工作区与stage的差异。

git diff HEAD:显示工作区与版本库的差异。

git diff –staged:显示stage与版本库的差异。

git diff3

举例:

git diff

 

此时执行git commit 会将stage的内容提交至版本库,即下图状态:

 

git diff2

 

 



 

 

1.工作区、stage、版本库 之间的关系:

git stage

查看工作区、stage、版本库的目录树:

1.查看版本库目录树:git ls-tree –l HEAD

2.查看stage目录树:首先先将stage目录树写入objects:git write-tree 会得到一个哈希串

git ls-tree –l 哈希串 即可查看刚才写入的的目录树


 

2.Git对象库关系:

                利用git cat-file 命令可以查看对象。参数-p:显示内容 参数-t:显示文件类型

git obj

 

3.git 版本库的结构:

HEAD是.git/refs/heads/master 的一个引用,而master即为一个哈希串,通过 git cat-file可以看出,它是一个commit。

demo$cat .git/refs/heads/master
c04a9ef45294528fec63d05fa67e40650e2fb60b

demo$git cat-file -t c04a9ef
commit

which version checked in?

git res

 



 

1.Git reset

    用于重置stage

1.git reset [-q] [<commit>] [--] <paths>…

2.git reset [ - -soft| - -mixed|- -hard|- - merge|—keep] [-q] [<commit>]

ps:<commit>为可选项,可以使用引用或者提交ID,如果省略,<commit>则相当于使用了HEAD的指向作为提交ID。

1方法是用指定的提交状态下的文件替换掉stage中的文件,例如git reset HEAD 相当于取消之前执行git add 命令时改变的stage。

2方法会引起重置引用。根据不同的选项,可以对stage区和工作区进行重置。

git reset

git reset –hard <commit> 会引发1->2->3动作

git reset –soft <commit> 只会引发1动作

git reset –mixed <commit> 会引发1->2动作(默认就是mixed,即同git reset <commit>)

 


2.Git checkout

    用于覆盖工作区

1.git checkout  [-q] [<commit>] [- -] <paths>             用stage文件覆盖工作区文件(前提:commit省略)

2.git checkout [<branch>]                                        切换分支

3.git checkout [-m] [[-b|—orphan] <new_branch>] [<start_point>] 创建、切换到新分支

git checkout

git checkout branch                    会引发1->2->3 动作

git checkout                               汇总显示工作区、stage、HEAD差异

git checkout  - -filename              用stage中的filename文件覆盖工作区中的filename文件

git checkout branch - - filename   维持HEAD不变,用branch中的filename覆盖stage与工作区的filename文件

git checkout - -.                         用stage中的所有文件覆盖工作区的文件

3.git stash 命令

    用于保存、恢复工作进度

1.git stash        保存当前工作进度(stage与工作区)

2.git stash list    显示进度列表

3.git stash pop [- -index] [<stash>] 不加参数会恢复最新保存的工作进度,并将恢复的工作进度从进度中删除

                                                 如果提供<stash>参数,则从该<stash>中恢复,恢复完毕删除

                                                 - -index 选项除了恢复工作区文件,并尝试恢复暂存区。

4.git stash [save [- -patch] [-k|- -[no-]keep-index] [-q|- -quiet] [<message>]

                                               保存进度并指定说明

                                                -- patch会显示工作区与HEAD的差异,通过差异文件的编辑决定在进度中最终要保存的工作区内容。

                                                -k 或 - -keep-index参数,在保存进度后不会将暂存区重置。默认会将暂存区、工作区强制重置。

5.git stash apply [- -index][<stash>] 恢复工作进度,但是不删除

6.git stash drop [<stash>]               删除一个存储的进度(最新)

7.git stash clear                             删除所有进度

8.git stash branch <branch_name> <stash> 基于进度创建分支

 

4.git 常用操作

1.删除:方法一:git rm file1 file2….(缺点:文件名得一个个删除,方法二直接把本地变更提交,解决此问题。)

           方法二:git add –u:将本地变更的文件(被版本库追踪的)记录到stage

  恢复删除:方法一:git cat-file –p HEAD~1:filename > localfilename

                方法二:git show HEAD~1:filename > localfilename

                方法三:git checout HEAD~1  - - filename (最简洁实用的方法)

2.移动:方法一:git mv oldname newname

           方法二:mv oldname newname

                      git add –A (相当于对修改文件git add 对删除文件执行git rm,对新增文件执行 git add)

                       这种方法git依旧能对内容追踪,感知到文件名的修改。

3.helloworld实例:

           git add –i :交互式的添加文件到stage

posted on 2012-12-02 17:20  cokecoffe  阅读(721)  评论(0编辑  收藏  举报

导航