git相关知识学习

下面内容为本人看Pro Git书的总结,如有类同,纯属巧合。

git中的命令主要分为两类:底层命令(Plumbing)和高层命令(Porcelain)。

在新目录或已有目录内执行git init时,Git会创建一个.git目录,几乎所有Git存储和操作的内容都位于该目录下。该目录下的内容介绍主要如下:

HEAD:指向当前分支

branches:分支信息。

config:包函了项目特有的配置选项。

description:新版git中仅提供GitWeb程序使用。

hooks:目录保存了客户端或服务器端钩子脚本。

index:文件保存了暂存区域信息。

info:保存了一份不希望在.gitignore文件中管理的忽略模式的全局可执行文件。

objects:目录存储所有数据内容。

refs:目录存储指向数据(分支)的提交对象的指针。

Git本质是一个commit对象的链表,每一个对象指向一个内容的快照。Git是一套内容寻址文件系统。不过Git从核心上来看,不过是简单地存储键值对(key-value)。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。

Git内部文件三种状态:1)已提交:表示该文件已经被安全地保存在本地数据库中;2)已修改:修改了某个文件,但还没有提交保存;3)已暂存:把已修改的文件放在下次提交时要保存的清单中了。

Git工作流程:1)在工作目录中修改某些文件;2)对修改后的文件进行快照然后保存到暂存区域;3)提交更新,将保存在暂存区域的文件快照永久存储到Git目录中。

Git工作需要curl、zlib、openssl、expat、libiconv等。

git config变量:1)/etc/gitconfig文件:系统中对所有用户都普遍使用的配置;2)~/.gitconfig文件:用户目录下的配置文件只使用于该用户;3).git/config:当前项目的Git目录中的配置文件,/etc/config。

git帮助命令:git help <verb>    git <verb> --help    man git-<verb>

取得Git项目方法:1)在现存目录下,通过导入所有文件来创建新的Git仓库;2)从已有的Git仓库克隆出一个新的镜像仓库,git clone。

在工作目录中初始化新仓库:git init

目录中文件:1)已跟踪:指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。2)未跟踪:既没有上次更新时的快照,也不能在当前的暂存区域。

git status:检查当前文件状态。 跟踪新文件:git add。   忽略某些文件.gitignore。

文件.gitignore格式规范如下:1)所有空行或者以注释符号#开头的行都会被git忽略;2)可以使用标准的glob模式匹配;3)匹配模式最后跟反斜杠(/)说明要忽略的是目录;4)要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

查看尚未暂存的文件更新了哪些部分:git diff

提交命令:git commit           git commit -a命令等效于git add ; git commit

移除文件命令:git rm

如果删除之前修改过并且已经放到暂存区域,则必须要用强制删除选项-f,以防误删文件后丢失修改的内容。

git rm \* ~ 中\必须存在,目的是完成递归删除当前目录及其子目录中所有~结尾的文件。

git mv file_from file_to 对文件进行更名,其实质为:git mv Readme.txt readme = git rm Readme.txt    git add readme

查看提交历史:git log(-p参数:展开显示每次提交的内容差异;-2:显示最近的两次更新)

git log --stat:显示简要的增改行数统计

git log --pretty选项:指定使用完全不同于默认格式的方式展示提交历史。

撤销操作:git commit --amend:将使用当前的暂存区域快照提交。

取消已经暂存的文件:git reset HEAD <file>...

远程仓库指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写,同他人协作开发某个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。

管理远程仓库的工作:1)添加远程库;2)移除废弃的远程库;3)管理各式远程库分支;4)定义是否跟踪这些分支。

查看当前的远程库:git remote

添加远程仓库:git remote add [shortname] [url]:

抓取远程库信息:git fetch [remote-name]

git pull命令:自动抓取数据下来,然后将远端分支自动合并到本地仓库中,当前分支。

推送数据到远程仓库:git push [remote-name] [branch-name]

查看远程仓库信息:git remote show [remote-name]

远程仓库的删除和重命名:git remote rename 原名 新名

git remote rm ...移除对应的远端仓库

列显已有的标签:git tag

git 标签有两种类型:1)轻量级的(lightweight)和含附注的(annotated)

含附注的标签:git tag -a v1.4 -m ‘my version 1.4’     git tag 

轻量级的标签:git tag v1.4 -lw    git tag

git tag -v [tag-name]:验证标签

git push origin [tag-name]:分享标签

一次推送所有本地新增的标签:git push origin --tags

自动补全:配置相关文件后,输入git命令后敲两次<Tab><Tab>键即可。

git命令别名:git config --global alias.co checkout   将checkout命令为别名co

Git分支:几乎每一种版本控制系统都以某种形式支持分支,使用分支意味着你可以从主线上分开来,然后在不影响主线的同时继续工作。

Git保存的是一系列文件快照。

Git中的分支,其实本质上仅仅是一个指向commit对象的可变指针。

创建分支命令:git branch 分支名

git checkout 分支名:(切换分支)   分支合并出现冲突则会停止。

git实现与项目复杂度无关,它永远可以在几毫秒的时间内完成分支的创建和切换。

分支合并命令:git merge

删除分支命令:git branch -d 分支名

查看各个分支最后一个提交对象的信息:git branch -v

git branch --merged

git branch --no-merged

git branch -d 分支名:删除分支

git branch -D 分支名:强制删除分支

分支都是本地分支。使用分支及合并的时候,一切都是在自己的Git仓库中进行的——完全不涉及与服务器的交互。

远程分支:对远程仓库中的分支的索引

远程分支像书签,提醒着你上次连接远程仓库时上面各分支的位置。

git fetch origin:同步远程服务器上的数据到本地

git remote add:天剑当前项目的远程分支

推送本地分支:git push 远程仓库名 分支名

跟踪分支是一种和某个远程分支有直接联系的本地分支。

git checkout -b 分支名 远程名/分支名

删除远程分支:git push 远程名:分支名

在服务器上删除serverfix分支:git push origin:serverfix

git push [远程名] [本地分支]:[远程分支]

分支的衍合:分支整合merge 分支衍合:rebase。分支衍合:git rebase [主分支][特性分支]

一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。

Git可以使用的协议有4种,分别为:本地协议,SSH协议,Git协议,HTTP协议,其中前3中协议都要求服务器端安装git

你可能感兴趣的:(git相关知识学习)