您的位置:首页 > 其它

Git命令学习笔记

2014-05-23 13:31 417 查看
配置个人的用户名称和电子邮件地址
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@ example.com

查看配置信息
$ git config —list

在工作目录中初始化新仓库
$ git init

当前目录下有几个文件想要纳入版本控制
$ git add *.c
$ git add README
$ git commit -m 'initial project version’

从现有仓库克隆
$ git clone git://github.com/schacon/grit.git

克隆的时候,自己定义要新建的项目目录名称
$ git clone git://github.com/schacon/grit.git mygrit

检查当前文件状态
$ git status # On branch master nothing to commit (working directory clean)

用 vim 编辑一个新文件 README,保存退出后运行 git status 查看状态
$ vim README
$ git status
# On branch master
# Untracked files:
# (use "git add
..." to include in what will be committed)
#
# README
nothing added to commit but untracked files present (use "git add" to track)

使用命令 git add 开始跟踪一个新文件
$ git add README

暂存已修改文件
$ git add benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD
..." to unstage)
#
# new file: README
# modified: benchmarks.rb

忽略某些文件
$ cat .gitignore *.[oa] *~
文件 .gitignore 的格式规范如下:
● 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
● 可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。
我们再看一个 .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 commit

可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新
$ git commit -m "Story 182: Fix benchmarks for speed”

跳过使用暂存区域
给 git commit 加上-a 选项

可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件
$ rm grit.gemspec
$ git rm grit.gemspec

把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
$ git rm --cached readme.txt

移动文件
$ git mv file_from file_to

查看提交历史
$ git log
常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
$ git log -p -2
--stat,仅显示简要的增改行数统计
$ git log —stat
用oneline 将每个提交放在一行显示,这在提交数很大时非常有用。另外还有 short,full 和fuller 可以用,展示的信息或多或少有些不同
$ git log --pretty=oneline
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 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明

--graph 选项,可以看到开头多出一些 ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local

git log 命令其他常用的选项及其释义
选项 说明
-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(后跟指定格式)

git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。下面的命令列出所有最近两周内的提交
$ git log --since=2.weeks

修改最后一次提交, 使用 --amend选项重新提交, 刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit —amend

取消已经暂存的文件
$ git reset HEAD benchmarks.rb

取消对文件的修改
$ git checkout
— benchmarks.rb

查看当前的远程库
$ git remote
origin
加上 -v 选项,显示对应的克隆地址
$ git remote -v
origin git://github.com/schacon/ticgit.git

添加远程仓库
$ git remote
origin
$ git remote add pb git://github.com/paulboone/ticgit.git
$ git remote -v
origin git://github.com/schacon/ticgit.git
pb git://github.com/paulboone/ticgit.git

从远程仓库抓取数据
要抓取所有 Paul 有的,但本地仓库没有的信息
$ git fetch pb

推送数据到远程仓库
把本地的 master 分支推送到origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字)
$ git push origin master

查看远程仓库信息
$ git remote show origin

远程仓库的删除和重命名, 把 pb 改成paul
$ git remote rename pb paul
$ git remote
origin
paul

移除对应的远端仓库
$ git remote rm
paul
$ git remote
origin

列显已有的标签, 直接运行 git tag
$ git tag v0.1 v1.3

新建标签, 含附注的标签
$ git tag -a v1.4 -m 'my version 1.4’

命令查看相应标签的版本信息
$ git show v1.4

签署标签 -a 改为 -s (译注: 取 signed 的首字母)
$ git tag -s v1.5 -m 'my signed 1.5 tag'

创建一个新的分支
$ git branch testing

切换到其他分支
$ git checkout testing

新建并切换到该分支
$ git checkout -b iss53

分支的合并(在问题 #53 相关的工作完成之后,可以合并回 master 分支)
$ git checkout master
$ git merge iss53

可视化的合并工具
$ git mergetool

查看当前所有分支
$ git branch
iss53
* master
testing

查看各个分支最后一个提交对象的信息
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readies

从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 –merge 和 –no-merged 选项
$ git branch --merged
iss53
* master

删除分支
$ git branch -d testing

分支的衍合
$ git checkout experiment
$ git rebase master
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: