下面内容为本人看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