A few common cmd for Rookie and will continuously add.
版本查看:
[jesse@localhost git]$ git --version
git version 1.7.1
命令路径:
[jesse@localhost demo]$ git --exec-path
/usr/libexec/git-core
配置文件设置: ~/.gitconfig
/* At least, something the code server need to know */
[jesse@localhost git]$ git config --global user.name "jesse"
[jesse@localhost git]$ git config --global user.email [email protected]
Dir: ~/.gitconfig
1 [user] 2 name = jesse 3 email = [email protected]
[jesse@localhost git]$ git config --global color.ui.true
<系统级配置文件>
/etc/gitconfig
(git config -e --system)
<全局配置文件>
~/.gitconfig
(git config -e --global)
<版本库级别配置文件>
/home/jesse/workMe/git/workspace/demo/.git/config
(git config -e)
==== demo测试 ====
"建立ProjSpace --> 修改 --> 提交 --> 查看"
[jesse@localhost workspace]$ pwd
/home/jesse/workMe/git/workspace
[jesse@localhost workspace]$ git init demo //建立工作目录demo
Initialized empty Git repository in /home/jesse/workMe/git/workspace/demo/.git/
[jesse@localhost demo]$ ls -a
. .. .git
/** demo目录中 为测试做些修改 **/
[jesse@localhost demo]$ touch welcome.txt
[jesse@localhost demo]$ echo "Hello." > welcome.txt
[jesse@localhost demo]$ cat welcome.txt
Hello.
[jesse@localhost demo]$ git add welcome.txt //工作区-->缓存区
[jesse@localhost demo]$ git commit -m "initialized." //缓存区-->HEAD
[master (root-commit) 26f91c7] initialized.
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 welcome.txt
[jesse@localhost demo]$ git status -s
/* added or committed */
[jesse@localhost .git]$ git log --pretty=fuller
commit cf10773ec27a2a5c852ddf8ea0ca43b850afa936
Author: jesse <[email protected]>
AuthorDate: Thu Jan 5 09:29:59 2012 +0800
Commit: jesse <[email protected]>
CommitDate: Thu Jan 5 09:29:59 2012 +0800
initialized.
[jesse@localhost demo]$ git log --graph --oneline
* af26ced does master follow this new commit?
* 010b7b8 initialized.
"工作区 -- 暂存区 -- HEAD区" <-- 重点理解
查看状态:
[jesse@localhost demo]$ mkdir a/b/c -p
[jesse@localhost demo]$ touch a/b/c/hello.txt
[jesse@localhost demo]$ echo "Bye-Bye." >> welcome.txt
[jesse@localhost demo]$ echo "Hello." >> a/b/c/hello.txt
[jesse@localhost demo]$ git add . // add, 但未 commit
[jesse@localhost demo]$ echo "Bye-Bye." >> a/b/c/hello.txt
[jesse@localhost demo]$ git status -s
AM a/b/c/hello.txt
M welcome.txt
[jesse@localhost demo]$ git diff diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt index 18832d3..e8577ea 100644 --- a/a/b/c/hello.txt +++ b/a/b/c/hello.txt @@ -1 +1,2 @@ Hello. +Bye-Bye.
[jesse@localhost demo]$ git diff --cached diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt new file mode 100644 index 0000000..18832d3 --- /dev/null +++ b/a/b/c/hello.txt @@ -0,0 +1 @@ +Hello. diff --git a/welcome.txt b/welcome.txt index f6dfd68..b1c2e36 100644 --- a/welcome.txt +++ b/welcome.txt @@ -1,3 +1,4 @@ Hello. :) World. :p +Bye-Bye.
[jesse@localhost demo]$ git diff HEAD diff --git a/a/b/c/hello.txt b/a/b/c/hello.txt new file mode 100644 index 0000000..e8577ea --- /dev/null +++ b/a/b/c/hello.txt @@ -0,0 +1,2 @@ +Hello. +Bye-Bye. diff --git a/welcome.txt b/welcome.txt index f6dfd68..b1c2e36 100644 --- a/welcome.txt +++ b/welcome.txt @@ -1,3 +1,4 @@ Hello. :) World. :p +Bye-Bye.
Git Commit Info:
[jesse@localhost demo]$ git log -l --pretty=raw <-- 查看某次的提交信息
commit 010b7b87a9b6b1fbe66b6867c80fa48560bf93e7 //提交的唯一标识 tree a7bf9f06fa0044b37291d75d8c217fb479fb319c //提交对应的目录树 parent 1bbc88dea49fd6219a4b07bb177251c40822a949 //上一次提交 author jesse <[email protected]> 1325729369 +0800 committer jesse <[email protected]> 1325729369 +0800
.git/ | branches/ | hooks/ | info/ | logs/ | objects/ | | 01/ | | | 0b7b87a9b6b1fbe66b6867c80fa48560bf93e7 ... ... | refs/ | | heads/ | | | master /* 分支中的“历史变化” */ | | tags/ | COMMIT_EDITMSG | HEAD/* ref--> refs/heads/master */ | config | description | index
[jesse@localhost demo]$ git cat-file -t 010b7b
commit
[jesse@localhost demo]$ git cat-file -p 010b7b
tree a7bf9f06fa0044b37291d75d8c217fb479fb319c
parent 1bbc88dea49fd6219a4b07bb177251c40822a949
author jesse <[email protected]> 1325729369 +0800
committer jesse <[email protected]> 1325729369 +0800
initialized.
jesse@BJSCWL1802 ~/test $ git cat-file -p e5d9 100644 blob 6d0548980902eed6e435e59a59844150a3c59353 welcome.txt jesse@BJSCWL1802 ~/test $ git cat-file -p 6d054 hello world add something
==== 参数选项 ====
选项 说明 -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(后跟指定格式)
--pretty=format 定制要显示的记录格式,这样的输出便于后期编程提取分析,像这样:
$ git log --pretty=format:"%h - %an, %ar : %s" ca82a6d - Scott Chacon, 11 months ago : changed the version number 085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code a11bef0 - Scott Chacon, 11 months ago : first commit
常用的格式占位符写法及其代表的意义:
选项 说明 %H 提交对象(commit)的完整哈希字串 %h 提交对象的简短哈希字串 %T 树对象(tree)的完整哈希字串 %t 树对象的简短哈希字串 %P 父对象(parent)的完整哈希字串 %p 父对象的简短哈希字串 %an 作者(author)的名字 %ae 作者的电子邮件地址 %ad 作者修订日期(可以用 -date= 选项定制格式) %ar 作者修订日期,按多久以前的方式显示 %cn 提交者(committer)的名字 %ce 提交者的电子邮件地址 %cd 提交日期 %cr 提交日期,按多久以前的方式显示 %s 提交说明
====分离HEAD指针====
jesse123@BJSCWL1802 ~/tmp
$ cat .git/HEAD
ref: refs/heads/master
===================
After detched HEAD:
===================
jesse123@BJSCWL1802 ~/tmp
$ cat .git/HEAD
asd0f98asd08adasd0f98asdf0sd8fasd... // HEAD不再与master同步,分离了
===================
Add new branch:
===================
jesse123@BJSCWL1802 ~/test2
$ git log --pretty=oneline
33746bf3bbe0c9d92c509bdaf67539963db46ccf master branch
91230cd710402918d7f0068ef70f346b665b51df second line have added.
71ec4240bf41ccb4dd2897f33f5d0e6642281bed add first line.
jesse123@BJSCWL1802 ~/test2
$ git rev-parse HEAD master
33746bf3bbe0c9d92c509bdaf67539963db46ccf
33746bf3bbe0c9d92c509bdaf67539963db46ccf
jesse123@BJSCWL1802 ~/test2
$ git checkout 9123 -b sec_branch // Create new branch
Switched to a new branch 'sec_branch'
jesse123@BJSCWL1802 ~/test2
$ git rev-parse HEAD master sec_branch
91230cd710402918d7f0068ef70f346b665b51df
33746bf3bbe0c9d92c509bdaf67539963db46ccf
91230cd710402918d7f0068ef70f346b665b51df
jesse123@BJSCWL1802 ~/test2
$ git status -s -b
## sec_branch
jesse123@BJSCWL1802 ~/test2
$ git branch -v
* master 33746bf master branch
sec_branch 1ef951c add new branch.
git merge <commit>
jesse123@BJSCWL1802 ~/test2
$ git log --graph --pretty=oneline --stat
* 7e15ce9590363f10e4fdbb47e0f93f22b973e13d Merge commit '1ef95' |\ | * 1ef951c567d17d1a6814538619423758b87c5c22 add new branch. | | file.txt | 1 + | | 1 files changed, 1 insertions(+), 0 deletions(-) * | 33746bf3bbe0c9d92c509bdaf67539963db46ccf master branch |/ | file.txt | 1 + | 1 files changed, 1 insertions(+), 0 deletions(-) * 91230cd710402918d7f0068ef70f346b665b51df second line have added. | file.txt | 1 + | 1 files changed, 1 insertions(+), 0 deletions(-) * 71ec4240bf41ccb4dd2897f33f5d0e6642281bed add first line. file.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
==== 恢复方案====
[jesse@localhost demo]$ git log --graph --oneline
* 759b436 initialized.
* 6623648 initialized.
* 26f91c7 initialized.
[jesse@localhost demo]$ git reset --hard 6623648
恢复上一级:
git reset --hard HEAD^
git reset: HEAD --> 暂存区
git reset --soft <commit>
Git友必看:http://progit.org/book/zh