git基础
git是版本控制工具,但是与svn不同的是它不是中央式版本控制,而是分布式的版本控制。
git中的文件具有三种状态:commit(已提交)、modify(已修改)、staged(已暂存)
安装git后:
配置用户信息:
$ git config [--global] user.name ["Jone Doe"]
$ git config [--global] user.email ["1580909730@qq.com"]
global参数:表示全局,所有项目都使用
配置工具:
$git config --global core.editor [emacs]
$ git config --global merge.tool [vimdiff]
查看配置信息:
$git config --list
获取帮助:
$git help <verb>
$git <verb> help
$main git <verb>
例如:学习config命令的使用: $ git help config
git基础:
从当前目录初始化:
对现有某项目Git管理,到项目所在目录: $git init
从现有仓库克隆:
git clone [url] [name]
例子:$ git clone [git://github.com/gzdx/learn.git]
$ git clone [git://github.com/gitgzdx/learn.git] [learngit]
记录每次更新到仓库:
确定那些文件属于什么状态: $ git status
跟踪新文件: geit add [readme.txt]
git add 后可以接要跟踪的文件或者目录的路径。如果是目录,就递归跟踪用户所有的该目录下的文件
git add . 可以跟踪工作区的所有未跟踪的文件或者已修改文件的最新状态到暂存区
一辈修改的文件如果被修改过,需要重新进行跟踪
忽略文件:
创建.ignore文件,列出要忽略的文件模式
.ignore的格式规范:
1、所有空行或以#开头的行都会被git忽略
2、可以使用标准的glob模式
3、匹配模式最后跟反斜杠(“/")说明要忽略的是目录
4、要忽略指定模式以外的文件或目录,可以在模式前加感叹号(!),取反
glob模式:简化了的正则表达式
*:匹配零个或多个任意字符
[abc]:匹配任意一个在方括号内的字符
?:只匹配一个任意字符
例子:
*.a :以.a结尾的文件
!lib.a :lib.a除外
/tdod :仅根目录下的tdod文件
build/ :build目录下的所有文件
doc/*.txt 会忽略doc/notex.txt 但不会忽略doc/server/arch.txt
查看已暂存和未暂存的更新
$ git status 显示比较简单,仅仅列出了修改过的文件,具体修改了什么地方,使用git diff命令
$ git diff 查看尚未暂存的文件更新了哪些部分
$ git diff --cache 查看已经暂存的和上次提交快照之间的差异
$ git diff --staged 和 git diff --cache效果相同
提交更新
$ git commit
git commit -m ["story"] 使用-m参数后加提交说明的方式
跳过使用暂存区域
$ git commit -a git会自动把所有自己跟踪的文件暂存起来一块提交
移除文件
要从git中移除某个文件,必须要从已跟踪文件清单中移除,然后提交
$ git rm [filepath]
$ git rm [filepath] -f 强制已经放到暂存区的内容
我们想要把文件从git中删除(即亦从暂存区移除),但仍然希望保留在当前工作目录中,例如日志文件或编译文件,移除跟踪,但是不删除文件,以便在.ignore文件补上,使用--cache参数即可
git rm --cache [readme.txt]
git rm [log/*.log] 后面可以列出文件或者目录的文字,也可以使用glob模式
”“其实有作用,因为git它有自己的文件匹配方式,所以我们不用shell来帮忙展开(实际上不加反斜杠也可以运行,按照shell拓展的话,仅删除指定目录下的文件而不会递归匹配)
git rm *~删除当期目录以及子目录中所有~结尾的文件
移动文件:
git中对文件改名: $ git mv file-rrom file_to
相当于执行下面三条命令:
$ git mv readme.txt readme
$ git rm readme.txt
$ git add readme
查看提交历史
$ git log 默认不适用任何参数,git log会按照提交时间列出所有的更新
git log有很多选项可以帮助你搜索感兴趣的提交
-p 参数:展开每次提交的内容差异
-2:仅显示最近的额两次更新
-- stat:仅显示最近的两次更新
--pretty:指定使用完全不同于默认格式的展示提示历史,如:oneline、short、full、fuller、format
format:定制要显示的记录格式,便于后期变成提取分析
例如: git log --pretty =format : "%h -%an ,%ar :%s"
常用的占位符写法以及代表的意义:
%H 提交对象(commit)的完整哈希字符串
%h 提交对像的剪短哈希字符串
%T 树对象(Tree)的完整哈西字符串
%t 树对象的剪短哈希字符串
%P 父对象parent的完整哈希字符串
%p 父对象的剪短哈希字符串
%an 作者(author)的名字
%ae 作者的电子邮箱
%ad 作者修订日期(可以使用-date="选项定制格式")
%ar 作者修订日期,可以接多久以前的方式显示
%cn 提交者(commit)的名字
%ce 提交者的电子邮箱地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
使用online或format时结合--graph选项,可以看到开头多一些ASCII字符串表示的简单图形,形象展示了每个提交所在的分支以及分化合并的情况
一些其他常用选项以及释义:
-P 接补丁格式或显示每个更新之间的差异
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示--stat中最后的行数,修改添加移除统计
--name-only 显示新增、修改、删除的文件的请单
--abbrev-commit 仅显示SHA-1的前几个字符而并非所有的40个字符
-- relative-date 使用较短的事件显示(比如 2 weak ago)
--graph 显示ASCII图形表示的分支合并历史
--pretty 使用其他格式显示历史提交信息,可用选项包括:online、short、full、fuller和format
限制输出长度:
git log除了设置输出格式,还可以限制输出长度
-(n) 仅显示最近的n条提交
--since,--before 显示指定时间之后的提交
--util,--before 显示指定时间之前的提交
--author 仅显示与指定作者相关的提交
--committer 仅显示指定提交者相关的提交
example: $ git log --p[retty="%h:%s" --author=gister --since="2008-10-10" --before="2008-11-10" --no-merges --t/
撤销操作
修改最后一次提交: git commit -amend
如归刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后运行--amend提交:
example:$git commit -m "inital commit"
$git add forgotten -file
$git commit --amend
取消已暂存的文件:$git reset HEAD <file>
取消文件的修改:$ git checkout --<file>
远程仓库的使用:
查看当前的远程分支: git remote
git remote -v (此为verbose的简写,取首字母),显示对应的克隆地址 verbose:冗长的
git remote -vv 显示对应的fetch和push地址
增加远程仓库: git remote add [short name] [url]
从远程仓库获取数据: git fetch [remote-name]
git fetch [remote-name] [branch-name] 抓取远程指定分支到本地
从远程抓取数据指的是讲远程的对应数据放在本地的远程对应缓存区内
如果设置了某个分支用于跟踪远程仓库的分支,可以$ git pull自动抓取,然后远端分支自动合并本地当前分支
推送分支到远端: $ git push [remote-name] [branch-name]
查看远程仓库信息:$ git remote show [remote-name]
远程仓库的删除和重命名: $ git remote rename
$ git remote rm
example: $git remote rename pb paul $git remote rm pual
打标签:
显示现有标签: $git tag
$ git tag -1 "v1.4.2" 展示感兴趣的标签
新建标签:
含附注标签: -a指定标签名称 $git tag -a v1.4 -m "my version 1.4"
签署标签: -s (signed首字母) $git tag -s v1.5 -m "my signed 1.5 tag"
轻量级标签:git tag v1.6
查看标签版本信息:git show $git show v1.4
验证标签:-v $git tag -v v1.4.2
后期加标签:-a $git tag -a v1.2 qfcebo2
推送标签到远端:
$git push origin v1.5
$git push origin tags (一次推送所有本地新增标签)
小技巧:
1、输入git命令时可以敲两次Tab,可以看到所有匹配的可用命令建议:
example : $ git a <tab> <tab><tab>
add am annotate apply archive
2、git 命令别名: example:$git config --global alias.co checkout