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 的变更
列出分支
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 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 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)的。
Git diff : 魔法
git - 简明指南 http://rogerdudler.github.io/git-guide/index.zh.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