pro git 学习<一>
来源:互联网 发布:java 转unix时间戳 编辑:程序博客网 时间:2024/04/29 11:50
Git基础
配置
git config
- /etc/gitconfig文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
- ~/.gitconfig文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
- 当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
用户信息
$ git config --global user.name "John Doe"$ git config --global user.email johndoe@example.com
文本编辑器
$ git config --global core.editor vim
差异分析工具
$ git config --global merge.tool vimdiff
查看配置信息
git config --list有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
$ git config user.nameScott Chacon
获取帮助
$ git help <verb>$ git <verb> --help$ man git-<verb>$ git help config
常用命令
从当前目录初始化
$ git init初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
从现有仓库克隆
$ git clone git://github.com/schacon/grit.git
如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令最后指定:
$ git clone git://github.com/schacon/grit.git mygrit唯一的差别就是,现在新建的目录成了 mygrit
检查当前文件状态
$ git status# On branch masternothing to commit (working directory clean)
跟踪新文件
$ git add README运行 git add 命令(这是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)。
运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来。
忽略某些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,像是日志或者编译过程中创建的等等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。$ cat .gitignore*.[oa]*~第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。
文件 .gitignore 的格式规范如下:
- 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
# 此为注释 – 将被 Git 忽略*.a # 忽略所有 .a 结尾的文件!lib.a # 但 lib.a 除外/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODObuild/ # 忽略 build/ 目录下的所有文件doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
查看已暂存和未暂存的更新
$ git diff比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
$ git diff --cached若要看已经暂存起来的文件和上次提交时的快照之间的差异
提交更新
$ git commit这种方式会启动文本编辑器以便输入本次提交的说明,使用 git config --global core.editor 命令设定你喜欢的编辑软件。
$ git commit -m "Story 182: Fix benchmarks for speed"
使用 -m 参数后跟提交说明的方式,在一行命令中提交更新。
提交时记录的是放在暂存区域的快照,任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。跳过使用暂存区域
$ git commit -a -m 'added new benchmarks'
移除文件
$ git rm grit.gemspec提交的时候,该文件就不再纳入版本管理了。如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
$ git rm --cached readme.txt
我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上
$ git rm \*~递归删除当前目录及其子目录中所有 ~ 结尾的文件。
移动文件
$ git mv file_from file_to其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.txt README$ git rm README.txt$ git add README
查看提交历史
$ git log
$ git log –p -2-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新。
$ git log --stat还有许多摘要选项可以用,--stat,仅显示简要的增改行数统计
$ git log --pretty=oneline--pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史
$ git log --pretty=format:"%h - %an, %ar : %s"format,可以定制要显示的记录格式
其他常用的选项及其释义。
选项 说明
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller
选项 说明
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller
如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件),可以用下面的查询命令:
$ git log --pretty="%h:%s" --author=gitster --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/
修改最后一次提交
$ git commit --amend此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。
$ git commit -m 'initial commit'$ git add forgotten_file$ git commit --amend上面的三条命令最终得到一个提交,第二个提交命令修正了第一个的提交内容。
取消已经暂存的文件
git reset HEAD benchmarks.rb
取消对文件的修改
git checkout -- benchmarks.rb
远程仓库的使用
查看当前的远程库
$ git remote
$ git remote -v-v 选项(译注:此为 --verbose 的简写,取首字母),显示对应的克隆地址
添加远程仓库
$ git remoteorigin$ git remote add pb git://github.com/paulboone/ticgit.git$ git remote -vorigin git://github.com/schacon/ticgit.gitpb git://github.com/paulboone/ticgit.gitgit remote add [shortname] [url]
添加远程仓库后,要push本地仓库到远程仓库中
从远程仓库抓取数据
$ git fetch [remote-name]命令会到远程仓库中拉取所有你本地仓库中还没有的数据。
推送数据到远程仓库
git push [remote-name] [branch-name]
$ git push origin master
查看远程仓库信息
git remote show [remote-name]$ git remote show origin
远程仓库的删除和重命名
$ git remote rename pb paul$ git remoteoriginpaul对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了 paul/master。
$ git remote rm paul
打标签
$ git tagv0.1v1.3
$ git tag -l 'v1.4.2.*'v1.4.2.1v1.4.2.2v1.4.2.3v1.4.2.4
新建标签
Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。
含附注的标签
$ git tag -a v1.4 -m 'my version 1.4'创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母), -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。
轻量级标签
$ git tag v1.4-lw
轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s 或 -m 选项都不用,直接给出标签名字即可
后期加注标签
$ git tag -a v1.2 9fceb0
分享标签
git push origin v1.5
默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin [tagname]
$ git push origin --tags如果要一次推送所有(本地新增的)标签上去,可以使用 --tags 选项
Git 命令别名
$ git config --global alias.co checkout$ git config --global alias.br branch$ git config --global alias.ci commit$ git config --global alias.st status
0 0
- pro git 学习<一>
- Pro Git学习笔记(一)
- 《Pro Git》学习笔记
- pro git 学习<二>
- 《pro git》学习笔记
- Git Pro学习(上)
- 《Pro git》学习笔记
- Pro Git学习笔记(一)——起步
- Git Pro深入浅出(一)
- 《pro git》分支学习记录
- pro git学习笔记(1)
- github学习(Pro Git)---第一章
- git在线学习教程 pro git
- 《Pro Git》笔记一:实用基础操作
- Pro Git学习笔记(2)
- github学习(pro git)---第二章
- 《Pro Git 2》学习笔记_Chapter 1
- 《Pro Git 2》学习笔记_Chapter 2
- Sqlite3 使用记录
- Java 7之传统I/O第2篇 - InputStream和OutputStream
- Filter - Surge.js模板引擎过滤器
- wifi学习网站
- 链表操作
- pro git 学习<一>
- 栈的操作
- Joseph
- Checkpoint not complete造成oracle故障报告及解决方案
- 利用栈将十进制数转化成八进制
- eclipse安装tomcat插件
- 括号匹配(栈操作)
- * JComBox组件,JList组件 ,JScrollPanel组件
- JSplitPane控件 JList控件
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
宿州信息网站
宿州招聘网
宿州先锋网
宿州人才信息网招聘
宿州信息网发布信息
宿州人亊考试网
宿州0557房产网
宿州学院就业网
宿州市人才市场招聘网
宿州信息网人才招聘网
宿州信息招聘网信息
宿州人才招聘信息网
宿州房产网新楼盘价格
宿州相亲网
安徽宿州信息网
宿州人才市场网招聘信息
宿州在线网
宿州房产信息网
宿州信息网招聘信息招聘
宿州房地产信息网
宿州招工信息网
武宿机场
武宿
武宿机场附近酒店
宿的拼音
逢雪宿芙蓉山主人拼音
整宿整宿拼音
宿字拼音
一宿的拼音
逢雪宿芙蓉山主人古诗带拼音
宿的多音字组词和拼音
宿建德江古诗拼音
星宿的拼音是什么
宿的拼音和组词
目的地的拼音
宿拼音怎么拼
旅游的拼音
游客拼音
游玩的拼音
风景拼音
山谷的拼音