Chris's Blog

Keep Walking......

Git常用命令

Git配置

/etc/gitconfig:系统中对所有用户都普遍适用的配置。若使用git config时用 –system 选项,读写的就是这个文件。
~/.gitconfig:用户目录下的配置文件只适用于该用户。若使用git config时用 –global选项,读写的就是这个文件。
.git/config:这里的配置仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/giconfig 中的同名变量。

文件状态

untracked:未加入版本控制管理的文件。
tracked:已纳入版本控制管理的文件。
unmodified:未做过修改,并且已经在版本控制管理中的文件。
modified:做过修改的受版本控制管理的文件。
staged:已放入暂存区的文件。untracked或者modified的文件,执行过git add后,就进入了暂存区。

.gitignore格式规范

  1. 所有空行或者以注释符号 # 开头的行都会被Git忽略。
  2. 可以使用标准的glob模式匹配。glob模式是指shell所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符;问号(?)只匹配一个任意字符;[a-z]匹配所有在这两个字符范围内的字符。
  3. 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  4. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

图形化工具

在项目工作目录中输入 gitk 命令后,图形化工具就会启动。

HEAD

HEAD是一个指向正在工作中的本地分支的指针。

Git命令

git init
将当前目录加入Git管理。

git clone [url]
克隆仓库。

git clone [url] [name]
自定义克隆仓库的名称。
–bare 把现有仓库导出未裸仓库,name以 .git 结尾。

git status
查看当前文件状态。

git add [file/dir]
跟踪新文件或目录。如果是目录的话,将递归跟踪该目录下的所有文件。该操作会将目标文件放入暂存区,同时untracked的文件标记为需要track,还能用于合并时把有冲突的文件标记为已解决状态。在执行了git add操作后,又对文件做出了修改,需要再次执行git add操作,否则执行提交操作时,只会将修改前的版本提交到仓库中。

git diff
查看尚未暂存的文件的变化内容。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。
–cached / –staged 查看已经暂存起来的文件和上次提交时的快照之间的差异。

git commit
提交暂存区域的更新。没有提交到暂存区的文件,提交时不会包含。这种无参数的提交命令会启动文本编辑器以便输入本次提交的说明。
-m 可以直接执行提交操作。
-a Git会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。
–amend 撤销刚才的提交操作,使用当前的暂存区域快照重新提交。

git reset HEAD [file]
取消已经暂存的文件。

git checkout – [file]
取消对未放入暂存区的文件的修改。

git rm [file/dir]
从已跟踪文件清单中移除文件,并从工作目录中删除指定的文件,才不会出现在未跟踪的文件清单中。
-f 强制删除已经放到暂存区域并且做过修改的文件。
–cached 将文件从Git仓库中删除(即移除跟踪),但仍然保留在当前工作目录中。
在路径中加上 \* 会递归删除当前目录及子目录中所有匹配的文件。

git mv [from_file] [to_file]
重命名操作。
该命令相当于运行了下面三条命令:

$ mv [from_file] [to_file]
$ git rm [from_file]
$ git add [to_file]

git remote
查看当前的远程库。在克隆完某个项目后,至少可以看到一个名为origin的远程库。
-v 显示对应的克隆地址。

git remote add [shortname] [url]
提交一个新的远程仓库。

git fetch [remote-name]
从远程仓库抓取数据到本地。fetch命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支。

git pull
如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用git pull命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中的当前分支。git clone命令本质上就是自动创建了本地的master分支用于跟踪远程仓库中的master分支。

git push [remote-name] [branch-name]
将本地仓库中的数据推送到远程仓库。

git push [remote-name] :[branch-name]
删除远程分支。

git remote show [remote-name]
查看远程仓库的详细信息。

git remote rename [origin-shortname] [shortname]
修改远程仓库在本地的简短名称。

git remote rm [shortname]
删除对应的远端仓库。

git tag
列出现有的标签。
-l 用特定的搜索模式列出符合提交的标签。
<tagname> 创建一个轻量级标签。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。
-a 创建一个含附注类型的标签。附注标签实际上是存储在仓库中的一个独立对象,它有自身的校验和信息。
-m 指定对应的标签说明。

git show [tagname]
查看相应标签的版本信息。

git push origin [tagname]
默认情况下,git push并不会把标签传送到远端服务器上,只用通过显示命令才能分享标签到远端仓库。
–tags 一次推送所有本地新增的标签上去。

git branch [branchname]
创建分支。如果没指定branchname,则列出所有的分支,并标明当前所在分支。
-b 创建分支并切换到该分支。
-d 删除分支。如果该分支还没并入当前分支,则不允许删除。
-D 强制删除分支。
-v 查看各个分支最后一个提交对象的信息。
–merge 查看哪些分支已被并入当前分支。
–no-merged 查看哪些分支尚未并入当前分支。

git checkout [branchname]
切换到其它分支,此时HEAD指向新的分支。

git merge [branchname]
合并分支到当前分支。
–squash 将目标分支上的所有更改全拿来应用到当前分支。
–no-commit 告诉Git此时无需自动生成和记录(合并)提交。

git rebase [branchname]
rebase分支内容到当前分支。
–onto 指定新的基底分支。

git log
查看提交历史。默认会按提交时间列出所有的更新,最近的更新排在最上面。

-[n] 仅显示最近的n条提交。
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 搜索提交说明中的关键字。如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match 选项,否则,满足任意一个条件的提交都会被匹配出来。
-- [path] 显示指定的文件或目录的历史提交。
-p 展开显示每次提交的内容差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改提交移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--abbrev-commit 仅显示SHA-1的前几个字符,而非所有的40个字符。
--relative-date 使用较短的相对时间显示(比如 “2 weeks ago”)。
--graph 显示ASCII图形表示的分支合并历史。
--pretty 使用其它格式显示历史提交信息。可用的选项包括oneline,short,full,fuller和format(后跟指定格式)。用oneline或format时结合--graph选项,可以看到开头多出一些ASCII字符串表示的简单图形,形象的展示了每个提交所在的分支及其分化衍合情况。oneline将每个提交放在一行显示,这在提交数很大时非常有用。format可以定制要显示的记录格式,这样的输出便于后期提取分析,如:$ git log --pretty=format:"%h - %ar : %s"

常用的占位符如下:

%H 提交对象(commit)的完整哈希字串
%h 提交对象的简单哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明

Tips

自动补全

如果使用的是Bash shell,下载Git的源代码,将contrib/completion/git-completion.bash复制到用户主目录中 cp git-completion.bash ~/.git-completion.bash,并把下面一行内容添加到你的.bashrc文件中:

source ~/.git-completion.bash

也可以为系统上所有用户都设置默认使用此脚本。Mac上将此脚本复制到/opt/local/etc/bash_completion.d目录中,Linux上则复制到/etc/bash_completion.d目录中。这两处目录中的脚本,都会在Bash启动时自动加载。

Git命令别名

可以用git config为命令设置别名,如:

git config --global alias.ci commit

Resources

Pro Git中文版:http://git-scm.com/book/zh

Comments