- Git的主要特点
- 分布式的,可以单机工作,用git管理自己的本地代码,记录改动日志
- 创建分支和tag比较简单,切换也很方便,不需要重复clone代码,一个code目录对应多个分支
- 跟踪的是文件内容,而不是文件。对目录不进行跟踪,所以没有空目录
- 可以和svn进行交互,你用git完全可以去访问团队的svn库
- 支持三种网络协议,ssh --安全,git--快,http/https协议--易架设,穿透好
- Git的安装
- 发行版本里一般有git rpm,直接安装即可
- 如果没有去https://git-scm.com/下载版本或源码安装
- 配置全局用户: git config --global user.name "Your Name"
- 配置全局电子邮箱:git config --global user.email "you@example.com"
- 配置颜色显示:git config --global color.ui "auto"
- 为特定版本库配置用户和email:
git config user.name "Your Name"
git config user.email "you@example.com"
- Git的日常用法
创建版本库 | git init |
添加新文件或暂存修改的文件 | git add <some file> |
提交改动 | git commit -m "<some message>" |
交互模式添加 | git add -i |
一步提交已修改的所有文件 | git commit -m "<some message>" -a |
查看状态 | git status |
创建远程版本库 | git remote add origin git@example.com:/repos/pocus.git git push orign master |
克隆远程版本库 | git clone git@example.com:/repos/pocus.git |
切换远程版本分支 | git branch -r git checkout <branch name> |
与远程版本库同步 | git fetch |
与远程版本库同步并合并 | git pull |
推入改动 | git push |
显示历史记录 | git log git log -1 git log --since=“6 hours” git log --before=“2 days” git log 7b1558c..32bde32 git log HEAD~5..HEAD |
查看当前目录树与暂存区差异 | git diff |
显示暂存区和版本库差异 | git diff --cached |
显示工作目录与版本库差异 | git diff HEAD |
显示工作目录与某次提交的差异 | git diff 182df2f |
显示两个版本间差异 | git diff 182df2f 23e392f |
显示差异统计 | git diff --stat <start point> [<end point>] |
显示文件内容修改记录 | git blame hello.c git blame -L 12,25 hello.c git blame -L 12,+2 hello.c 相当于12,13行 git blame -L 12,-2 hello.c 相当于11,12行 |
列分支 | git branch 列本地的分支 git branch -r 列远程的分支 git branch -a 列所有的分支 |
创建分支 | git branch <new branch> git branch <new branch> <start point> 基于分支,提交,标签 |
捡出分支 | git checkout |
创建并捡出分支 | git branch -b <new branch> |
直接合并分支 | git merge <some branch> |
压合合并分支 | git merge --squash <some branch> |
分支拣选合并,并提交 | git cherry-pick 18ef23d |
多个改动拣选合并 | git cherry-pick -n 321d76f (-n是不提交) git commit |
删除分支 | git branch -d <branch> (-d未合并的分支不能删除) git branch -D <branch> |
撤销修改 | git revert -n HEAD |
复位到某个版本 | git reset 540ecb7 |
打标签 | git tag 1.90 |
给分支打标签 | git tag one/1.90 <one branch> |
- Git的高级用法
使用git子模块跟踪外部版本库
添加子模块版本库 git submodule add <git url> <name>
初始化 git submodule init <name>
获取子模块内容 git submodule update <name>
改变Git使用的子模块版本 git add <name> ; git commit
导出版本
git archive --format=zip --prefix=mysite/ HEAD > mysite.zip
git archive --format=tar --prefix=mysite-1.0/ 1.0 | gzip > mysite-1.0.tar.gz
二分查找
git bisect start
git bisect bad
git bisect good 1.0
git bisect reset
- 使用git-svn访问svn库
克隆 git svn clone -s --prefix svn/ <svn repository>
git svn clone -r3478:HEAD --prefix svn/ http://svnpath
更新 git svn fetch 或 git svn rebase(常用rebase)
将修改推回上游svn库 git svn dcommit
列出所有将要被推入的修改 git svn dcommit -n
日志 git svn log
追溯 git svn blame <some file>
- 使用Gitosis管理Git服务器
略