Git是什么?
Git是目前世界上最先进的分布式版本控制系统 (没有之一);相比于CVS及SVN都是集中式的版本控制系统,Git是分布式版本控制系统;
创建版本库
1、在指定目录下创建一个新的本地代码仓库
git init
2、克隆一个远程代码库到本地,比如GitHub地址为:https://github.com/henryneu/SwipeRefreshDemo.git
git clone https://github.com/henryneu/SwipeRefreshDemo.git
本地修改
1、查看当前工作目录下文件的状态
git status
2、查看当前工作目录下修改了哪些内容
// 此命令比较的是当前工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git diff
// 若要看已经暂存起来的文件和上次提交时的快照之间的差异(Git 1.6.1 及更高版本还允许使用 git diff --staged,
// 效果是相同的,但更好记些)
git diff --cached
// 查看某一目录下具体文件的变化
git diff /f/MyRecyclerViewDemo/README.md
3、把当前工作目录下所有文件的更改提交到暂存区
// 开始跟踪当前工作目录下的所有文件
git add .
4、添加指定文件中的一些修改到暂存区
git add -p <file>
5、强制添加指定文件到暂存区
git add -f <file>
6、提交更改
// 提交之前,须确认还有什么修改过的或新建的文件还没有 git add 过,否者提交的时候不会记录这些还没暂存起来的变化
// 所以每次提交前,先 git status 看一下
git commit
// 使用 -m 参数后跟提交说明的方式,在一行命令中提交更新
git commit -m "提交说明"
7、把所有已经跟踪过的当前工作目录下的文件暂存起来一并提交,跳过 git add 步骤
git commit -a -m "提交说明"
8、提交时漏掉几个文件,或者提交信息写错,想撤销刚才的提交操作,使用 –amend 命令重新提交
// --amend 命令使用当前的暂存区域快照提交,如果刚才提交完没有作任何改动,此命令相当于重新编辑提交说明
git commit --amend
// 如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,在运行 --amend 命令
git add forgetten_file
git commit --amend
9、取消已经暂存的文件 test.txt
// test.txt文件回到之前已修改为暂存的状态
git reset HEAD test.txt
10、撤消对文件 test.txt 的修改
// test.txt文件恢复到修改前的版本
git checkout -- test.txt
11、重命名当前工作目录及版本库中指定文件的名字
// 更改指定文件的名字
git mv text.txt test.txt
忽略某些文件
我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。此时可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式,自动过滤设置的文件。在提交的时候,会过滤掉.gitignore文件中所设置的过滤条件。
文件 .gitignore 的格式规范如下:
1、所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
2、可以使用标准的 glob 模式匹配。
3、匹配模式最后跟反斜杠(/)说明要忽略的是目录。
4、要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
创建.gitignore文件:
1、在已创建好的代码仓库中,创建.gitignore文件
touch .gitignore
2、编辑.gitignore文件
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
删除文件
1、先添加一个新文件test.txt到Git并且提交
git add test.txt
git commit -m "add test"
2、删除文件test.txt
// 移除test.txt文件
rm test.txt
// 从版本库中移除并提交
git rm test.txt
git commit -m "remove test"
// 把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
git rm --cached test.txt
git commit -m "remove test"
查看提交历史
查看提交历史命令如下:
// 不用任何参数,会按提交时间列出所有的更新,最近的跟新排在最上面
git log
// -p参数展开显示每次提交的内容差异,-2仅显示最近的两次更新
// 代码审查或者要快速浏览其他协作者提交的更新都作了哪些改动时,使用此命令
git log -p -2
// 仅显示简要的增改行数统计
git log --stat
// 指定使用完全不同于默认格式的方式展示提交历史,如oneline,显示在一行,还有short、full和fuller
git log --pretty=oneline
// 定制要显示的记录格式,读者可以自查,常用的格式占位符写法及其代表的意义
// 命令的格式是:提交对象的简短哈希字符串 - 作者名字 - 作者修订日期,按多久以前的方式显示 - 提交说明
git log --pretty=format:"%h - %an, %ar : %s"
// 再结合 --graph 命令,形象的展示每个提交所在的分支及其分化衍合情况
git log --pretty=format:"%h - %an, %ar : %s" --graph
// --since 和 --until 限制输出长度,如下命令,列出所有最近两周内的提交
git log --since=2.week
远程仓库的使用
1、查看当前的远程仓库
// 列出每个远程库的简短名字
git remote
// 列出每个远程库的简短名字及对应的地址
git remote -v
2、添加远程库
// 添加新的远程库,并指定一个简单的名字
git remote add [shortname][url]
git remote add mrv https://github.com/henryneu/SwipeRefreshDemo.git
3、从远程仓库抓取数据
// 从远程仓库中抓取数据到本地
git fetch [url 或 remote-name]
4、推送数据到远程仓库
// 将本地的 master 分支推送到 origin 服务器上
git push origin master
5、查看远程仓库信息
// 查看 origin 仓库的信息
git remote show origin
6、远程仓库的删除和重命名
// 把我们上面的新远程库 mrv 重命名为 paul
git remote rename mrv paul
// 移除对应的远端仓库
git remote rm paul
打标签
1、列显已有的标签
// 列显标签,显示的标签按字母顺序排列
git tag
// 仅显示1.4.2系列的版本
git tag -l 'v1.4.2.*'
2、新建标签,两种类型:轻量级的(lightweight)和含附注的(annotated)
// 新建一个轻量级的标签
git tag v1.1
// 新建一个含附注类型的标签 -a 指定标签名字 -m 指定了对应标签的说明
git tag -a v1.0 -m "version 1.0"
// 查看相应标签的版本信息
git show v1.0
3、部署标签
// 若有私钥的话,可以用GPG来签署标签
git tag -s v1.1 -m "version signed 1.1"
4、验证已经部署的标签
// 验证已部署标签
git tag -v v1.1
5、后期加注标签
// 验证已部署标签
git tag -a v1.2 [对应提交对象的校验和(或前几位字符)]
6、分享标签
// 分享标签到远程仓库
git push origin v1.2
// 一次推送所有(本地新增的)标签到远程仓库
git push origin --tags
Git 分支
1、创建分支
// 创建一个新的分支指针 testing
git branch testing
2、切换分支
// 切换到分支 testing
git checkout testing
// 相当于先创建分支,然后切换到新建的分支
git checkout -b testing
3、合并分支
// 先切换 master 分支
git checkout master
// 后合并分支 testing 到 master 分支上
git merge testing
// 合并之后可以删掉 testing 分支,然后可以进行 commit 提交
git branch -d testing
// 未合并的分支,执行删除会失败,此时也可以强制执行删除操作
git branch -D testing
4、分支衍合
// 提取所在分支 testing 每次提交时产生的差异,分别保存到临时文件中
git checkout testing
// 从当前分支转换到需要衍合入的分支 master
git rebase master
5、分支管理
// 查看各个分支最后一次 commit 信息
git branch -v
// 查看哪些分支已被/未被并入当前分支
git branch --merged / --no-merged
6、远程分支,是对远程仓库状态的索引,用 (远程仓库名) / (分支名) 这样的形式表示远程分支,如:origin / master
// 为本地分支设定不同于远程分支的名字 os
git checkout -b os origin/master
// 推送 master 到远程分支
git push origin master
// 删除远程分支 testing
git push origin : testing