1. Git命令
1.1. Git配置
$ git config --global user.name "John Doe" 设定用户名
$ git config --global user.email johndoe@example.com 设定邮件地址
$ git config --global core.editor emacs 设置文本编辑器
$ git config --list 查看配置信息
$ git help <verb> 获取帮助
1.2. Git基础命令
1.2.1. 取得项目Git仓库等
$ git init 从当前目录初始化
$ git clone git://github.com/schacon/grit.git 克隆仓库(后可加名字)
1.2.2. 记录更新到仓库
$ git add README 添加文件并跟踪
$ git commit -am 'initial project version' 提交文件
$ git status 查看文件状态
$ cat .gitignore 浏览忽略文件设置
📋
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
$ git diff 查看当前文件和暂存区域快照之间的差异,即修改后没有暂存的变化内容
$ git diff --cached 查看已经暂存起来的文件和上次提交时的快照之间的差异
$ rm grit.gemspec 从工作目录删除文件
$ git rm grit.gemspec 在git里记录此次删除操作
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
$ git rm --cached readme.txt 只从跟踪清单中删除,不在工作目录删除
$ git rm log/\*.log 删除所有 log/目录下扩展名为 .log 的文件
$ git rm \*~ 递归删除当前目录及其子目录中所有 ~ 结尾的文件
$ git mv file_from file_to 文件改名操作
1.2.3. 查看提交历史
$ git log 查看提交历史
$ git log –p -2 -p 选项展开显示每次提交的内容差异, -2 则仅显示最近的两次更新
$ git log origin/featureA ^featureA (先fetch)查看远程分支与本地分支相比更新了什么
$ git log --pretty=format:"%h - %an, %ar : %s" 自定义格式
📋
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
26
Scott Chacon Pro Git 2.3节 查看提交历史
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
📋
选项 说明
-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 和 format(后跟指
定格式)
📋
选项 说明
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
$ git commit --amend 重新提交最后一次修改
$ git reset HEAD benchmarks.rb 取消暂存文件
1.2.4. 远程仓库的使用
📋
$ git clone git://github.com/schacon/ticgit.git
$ cd ticgit
$ git remote -v #列出所有远程仓库(Git 默认使用origin来标识你所克隆的原始仓库)
📋
$ git remote add pb git://github.com/paulboone/ticgit.git #添加远程仓库
$ git fetch pb # fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支
$ git merge pb/master #合并远程仓库分支到本地分支
$ git push origin master #将本地仓库中的数据推送到远程仓库
$ git remote show origin #查看远程仓库信息
$ git remote rename pb paul #修改远程仓库名 pb->paul
$ git remote rm paul #移除远程仓库 paul
打标签
$ git tag 列出现有标签
$ git tag -l 'v1.4.2.*' 列出v1.4.2系列标签
$ git tag -a v1.4 -m 'my version 1.4' 新建含附注的标签
$ git tag -s v1.5 -m 'my signed 1.5 tag' 签署标签
$ git tag v1.4 新建轻量级标签
$ git tag -v v1.4.2.1 验证标签
$ git tag -a v1.2 9fceb02 后期添加标签,加对应提交对象的校验和(或前几位字符)
$ git push origin --tags 推送标签到远程仓库
$ git config --global alias.co checkout 设置命令别名
$ git config --global alias.last 'log -1 HEAD' 查看最后一条命令(设置别名)
Git分支
分支概念
$ git branch testing 新建分支
$ git checkout testing 切换分支
$ git checkout -b iss53 新建并切换到新分支
📋
$ git checkout master
$ git merge hotfix #先切换到主分支,再合并其他分支
`$ git branch -d hotfix` #删除分支
$ git mergetool 调用图形工具界面解决分支冲突
$ git branch 展示所有分支
$ git branch -v 查看各个分支最后一次 commit 信息
$ git branch --merged
$ git branch --no-merged 查看与当前分支合并或者未合并的分支
$ git push origin serverfix 推送分支(仓库名+分支名)
$ git push origin serverfix:serverfixxx 推送分支到指定分支
$ git push origin :serverfix 删除远程分支
$ git push -f origin serverfix 强制重写远程分支
📋
$ git fetch origin
$ git checkout -b serverfix origin/serverfix #从远程仓库抓取数据后,不会得到新分支,需要自己在远程分支上分化分支
$ git pull 获取所有远程索引,并把它们的数据都合并到本地分支
衍合
$ git rebase master 衍合分支(使提交历史更清楚,把你所在分支衍合入master)
$ git rebase --onto master server client 检出 client 分支,找出 client 分支server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍
$ git rebase master server git rebase [主分支] [特性分支]
永远不要衍合那些已经推送到公共仓库的更新!!!
服务器上的Git
$ git clone /opt/git/project.git
$ git remote add local_proj /opt/git/project.git 把本地仓库作为远程仓库添加到Git工程列表
分布式Git
📋
$ git clone (url)
$ cd project
$ git checkout -b featureA
$ (work)
$ git commit
$ (work)
$ git commit
$ git push oringin featureA
$ git checkout -b featureB origin/master
$ (work)
$ git commit
$ git push oringin featureB
$ (email maintainer)
$ git fetch origin **一般项目工作流程**
项目管理
$ git checkout -b sc/ruby_client master 新建特性分支
$ git apply /tmp/patch-ruby-client.patch 补丁文件为 git diff 或由其它 Unix 的 diff 命令生成
$ git apply --check 0001-seeing-if-this-helps-the-gem.patch 查看补丁是否能够应用到当前分支中
$ git am 0001-limit-log-function.patch 适用于format-patch 补丁
📋
`$ git am --abort` **放弃掉以前的am信息**
`$ git am --skip` **跳过这个补丁**
`$ git am --resolved` **提交修正结果**
`$ git am -3 0001-seeinggem.patch` **进行3三方合并**
`$ git am -3 -i mbox` **对于补丁是mbox格式,用-i 进行交互模式,可分步操作**
$ git diff master...contrib 寻找contrib和master的共同祖先然后对比差异