Git版本库理解和Git bash 命令行

原创 2015年11月20日 22:15:50

Github 版本控制总共由三部分组成 : 工作区 、暂存区(index) 和 版本库(暂存区可以理解为包含在版本库内)。


Git 之所以叫分布式版本控制系统,和 SVN的集中式版本控制不同之处是:Github在本地也有版本库,①提交(commit)直接保存在本地,要保存在远程端再用②推送(push),svn没由①步骤,所以在无网络的情况下是不能进行版本控制的。


1. cat-file 命令只用于版本库对象

    git cat-file -t ID 输出ID类型(blob/tree...)
    git cat-file -p ID 输出ID所指向对象的内容
    git cat-file commit/blob和-p HEAD/HEAD:filename

2. 可查看哈希值用法:git rev-parse HEAD:filename , git ls-files , git ls-tree -l HEAD.
3. 查看所有 commit 记录:git log --pretty=raw --graph HEAD.

            git log --pretty=oneline


4. git reset --hard HEAD^/ID
     HEAD^ 代表父提交(HEAD^^/HEAD^number/HEAD~number),
     HEAD^{tree} HEAD版本对应的tree,HEAD^^{tree}HEAD的父提交对应的tree 。
    工作区 和 暂存区 都将被更新为ID所指向的版本
   git reset HEAD

    暂存区更新,工作区不受影响





5. git reflog show master 操作.git/log/refs/heads/master,针对log操作。
   恢复被 reset 的更改,可根据reflog的输出,再次git reset --hard master@{x}.
6. git add filename 反向操作 :git checkout -- filename 或 git reset HEAD filename,但两者操作结果不一样。
7. git stash 保存进度的时候,工作区和暂存区都会修改成和版本库一模一样,然后将与最新commit的不同保存在.git/log/refs/stash中,
   git stash pop/list/apply... 从stash 中恢复。
8. 本地没有被版本库控制的文件不能够保存进度。
9. git branch new-branchname 时,新的分支基于头指针HEAD创建,删除:git branch -d branchname。

10. ①git checkout -b new-branchname [<start_point>]= git branch new-branchename + git checkout new-branchname
    start_point 可以是tag 或者 commit 。。。
    ②git checkout . 或 git checkout -- <file>
    会用暂存区全部文件 或 部分文件替代工作区文件
    ③git checkout HEAD . 或 git checkout HEAD <file>
    会用HEAD所指向的master分支中的全部或者部分文件替代暂存区和工作区的文件
    (注意和git reset --hard HEAD 的区别)


11. git cherry 查看本地版本库比远程版本库领先的提交。
12. 除了以.git/refs/heads/ 为前缀的引用之外,如果检出任何其他引用,都将使工作区处于分离头指针状态。
    (远程版本库操作remote)
13. git remote add new-remote url 注册新远程版本库,可查看.git/config(origin)。
14. git remote update 所有远程版本库更新。
15. git remote rm remote-name.
16. 对于新建立的本地分支(没有建立和远程分支的追踪),执行git push 命令是不会推送到远程版本库中的,
    可通过git push <remote> <new-branch>;相应地,git pull也不会将新分支合并到本地,因为没有追踪,要用参数。
17. git push 命令推送时不会将里程碑推送到远程版本库,git fetch 则会将远程里程碑获取到本地版本库,可用-n/--no-tags不获取。
18. git remote add --no-tags remote-name url,避免远程版本库的里程碑引入本地版本库。


19. git diff 比较工作区和提交暂存区(stage)
    git diff HEAD 工作区和HEAD(当前工作分支)比较
    git diff --cached/--staged 提交暂存区和HEAD(版本库)比较

20. git status -s
    第一列 是暂存区和版本库的比较
    第二列 是暂存区和工作区的比较

21. git ls-tree -l HEAD (只能针对版本库对象)查看版本库目录树 (-l 输出文件大小)

22. git ls-files -s 显示暂存区的目录树(第三个字段是暂存区编号)
23. git clean -fd 清楚当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录)

24. git write-tree 将暂存区的目录树写入git对象库,然后可用git ls-tree查看目录树

25. git rm --cached <file>
    删除暂存区的文件,其他区域不受影响

每一个commit有父commit,彼此间的联系,每个commit都有一个对象,而每个提交(commit)都有一个tree,tree的ID指向了包含文件的目录,每个被提交过的文件(blob)也有ID。


git status -s

第一列是暂存区和版本库的之间的差异

第二列是工作区和暂存区之间的差异

版权声明:本文为博主原创文章,未经博主不允许随意转载。

google v8使用示例

概念解释 Handle V8里使用Handle类型来托管 JavaScript对象,与C++的std::shared_pointer类似,Handle类型间的赋值均是直接传递对象引用,但不同的...

win32com调用ATL编写的COM组件

IDL文件 import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(B325C169-61FA-4513-9DB1-0CC231CCB63...

git版本库常用命令汇总

初始化配置 #配置使用git仓库的人员姓名 git config --global user.name "Your Name Comes Here" #配置使用git仓库的人员email git c...

git版本管理命令行整理

本篇博客为博主原创,因博客搬家,在另一同名博客中有相同文章,特此声明!...

创建Git版本库

以下练习例子参考的教程来自Git教程-廖雪峰的官方网站,想要看原教程可点击前往。如有侵权,烦请告知,谢谢!1.创建空目录mkdir 创建空目录后使用pwd命令显示当前目录: 2.在目录中创建版本库g...

Git版本库相关操作

Git是分布式版本控制系统,Git中的版本库,也叫做仓库,英文称为repository,版本库就像一个目录,目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都可以跟踪,方便任何时...

Git版本库深入剖析

图1.(git版本库结构图) 当然工作区和版本库(.git)是并列的关系。这里只研究版本库部分。 图中的各部分与版本库中的文件的对应关系。 index                    --...

Git版本库(2)

上一篇文章我们大概了解了Git的简介以及Git的一些基本命令,那么现在我们来更为深入的接触Git。    Git本地分支与合并   先看一些基本命令:   git branch [分支名]   ...

Git版本库的建立及文件的添加

创建Git版本库并向其添加文本文件,使用到的命令有:git inti、git add以及git commit...

Git版本库的概念/创建

什么是版本库呢? 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Git版本库理解和Git bash 命令行
举报原因:
原因补充:

(最多只允许输入30个字)