简介:
Git常用命令表
Git命令思维导图
git命令:
user@ROOT:~$ git
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
最常用的 git 命令有:
add 添加文件内容至索引
bisect 通过二分查找定位引入 bug 的变更
branch 列出、创建或删除分支
列出分支
git branch -a
创建分支
git branch my2.6.14 v2.6.14
删除分支
git branch -d feature_x
checkout 检出一个分支或路径到工作区
例子: git checkout project3.0
创建分支:
git checkout -b branch-001 -- 建立分支并checkout该分支
git push origin branch-001 -- 将分支push到远程分支上
删除分支:
git checkout master -- 切换到master分支
git branch -d branch-001 -- 删除本地分支branch-001
git push origin :branch-001 --将本地删除的分支push到远程分支
git 去掉原仓库git地址信息:
git remote -v 命令查看是否关联到了新的git仓库地址
git remote rm origin将之前的关联的git地址删除
然后我们再git remote add origin 关联到新的远程库的地址
然后push
clone 克隆一个版本库到一个新目录
执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端服务器上的仓库,你的命令会是这个样子:
git clone username@host:/path/to/repository
commit 记录变更到版本库
diff 显示提交之间、提交和工作区之间等的差异
fetch 从另外一个版本库下载对象和引用
grep 输出和模式匹配的行
init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库
log 显示提交日志
merge 合并两个或更多开发历史
mv 移动或重命名一个文件、目录或符号链接
pull 获取并整合另外的版本库或一个本地分支
push 更新远程引用和相关的对象
rebase 本地提交转移至更新后的上游分支中
reset 重置当前HEAD到指定状态
rm 从工作区和索引中删除文件
show 显示各种类型的对象
status 显示工作区状态
tag 创建、列出、删除或校验一个GPG签名的 tag 对象
命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些指南。参见
'git help <命令>' 或 'git help <指南>' 来查
user@ROOT:~$ git help -a
用法:git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
在 '/usr/lib/git-core' 下可用的 git 命令
add merge-one-file
add--interactive merge-ours
am merge-recursive
annotate merge-resolve
apply merge-subtree
archive merge-tree
bisect mergetool
bisect--helper mktag
blame mktree
branch mv
bundle name-rev
cat-file notes
check-attr p4
check-ignore pack-objects
check-mailmap pack-redundant
check-ref-format pack-refs
checkout patch-id
checkout-index prune
cherry prune-packed
cherry-pick pull
clean push
clone quiltimport
column read-tree
commit rebase
commit-tree receive-pack
config reflog
count-objects relink
credential remote
credential-cache remote-ext
credential-cache--daemon remote-fd
credential-store remote-ftp
daemon remote-ftps
describe remote-http
diff remote-https
diff-files remote-testsvn
diff-index repack
diff-tree replace
difftool request-pull
difftool--helper rerere
fast-export reset
fast-import rev-list
fetch rev-parse
fetch-pack revert
filter-branch rm
flow send-pack
fmt-merge-msg sh-i18n--envsubst
for-each-ref shell
format-patch shortlog
fsck show
fsck-objects show-branch
gc show-index
get-tar-commit-id show-ref
grep stage
hash-object stash
help status
http-backend stripspace
http-fetch submodule
http-push subtree
imap-send symbolic-ref
index-pack tag
init unpack-file
init-db unpack-objects
instaweb update-index
log update-ref
ls-files update-server-info
ls-remote upload-archive
ls-tree upload-pack
mailinfo var
mailsplit verify-pack
merge verify-tag
merge-base web--browse
merge-file whatchanged
merge-index write-tree
merge-octopus
命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些指南。参见
'git help <命令>' 或 'git help <指南>' 来查看给定的子命令帮助或指南。
看给定的子命令帮助或指南。
Git 工作区、暂存区和版本库使用业务流程图
- —— “被眼花缭乱的 Git 魔法彻底搞糊涂了?”
- —— “Git 为什么这么折磨人,修改的文件直接提交不就完了么?”
- —— “看不出 Git 这么做有什么好处?”
$ git checkout -- welcome.txt $ git status -s我们通过状态输出,看以看到工作区已经没有改动了。我们查看一下 .git/index 文件,注意该文件的时间戳(19:37:44):
$ ls --full-time .git/index -rw-r--r-- 1 jiangxin jiangxin 112 2010-11-29 19:37:44.625246224 +0800 .git/index我们再次执行 "git status" 命令,然后显示 .git/index 文件的时间戳(19:37:44),和上面的一样。
$ git status -s $ ls --full-time .git/index -rw-r--r-- 1 jiangxin jiangxin 112 2010-11-29 19:37:44.625246224 +0800 .git/index现在我们更改一下 welcome.txt 的时间戳,但是不改变它的内容。然后再执行 "git status" 命令,然后查看 .git/index 文件时间戳(19:42:06)。
$ touch welcome.txt $ git status -s $ ls --full-time .git/index -rw-r--r-- 1 jiangxin jiangxin 112 2010-11-29 19:42:06.980243216 +0800 .git/index看到了么,时间戳改变了! 这个试验说明当执行 "git status" 命令扫描工作区改动的时候,先依据 .git/index 文件中记录的(工作区跟踪文件的)时间戳、长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,说明文件的内容 可能 被改变了,需要要打开文件,读取文件内容,和更改前的原始文件相比较,判断文件内容是否被更改。如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。因为判断文件是否更改,使用时间戳、文件长度等信息进行比较要比通过文件内容比较要快的多,所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。
文件 .git/index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的 内容并不存储其中,而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。下面这个图展示了工作区、版本库中的暂存区和版本库之间的关 系。
工作区、版本库、暂存区原理图
在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的。- 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
- 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个“游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
- 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,我们会在后面的章节重点介绍。
- 当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件索引中。
- 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
- 当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
- 当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
- 当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
- 当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动。
Git diff : 魔法
- git diff : 工作区和暂存区比较
- git diff --cached : 暂存区和HEAD比较
- git diff HEAD : 工作区和HEAD比较
参考资料:
git - 简明指南 http://rogerdudler.github.io/git-guide/index.zh.html
git使用简介 http://www.cnblogs.com/timsheng/archive/2012/11/28/2792977.html
Github使用指南 https://github.com/neuola/neuola-legacy/wiki/github%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97
如何创建你自己的Git服务器 http://blog.jobbole.com/60505/
<Git权威指南>
git clone简介 http://hubingforever.blog.163.com/blog/static/17104057920123142049243/
git分支建立删除,打tag : http://blog.csdn.net/dijason/article/details/9042425
git思维导图 : http://www.imyukin.com/wp-content/uploads/2012/06/git.png
我痛恨 Git 的 10 个理由 http://www.open-open.com/news/view/889e6
Git Cheat Sheet http://www.zhiweinet.com/Image/20092182110463177801.pngy
介绍一个成功的 Git 分支模型 http://www.oschina.net/translate/a-successful-git-branching-model