git命令
常用git命令
1.git clone <http> //克隆仓库
2.git add -A
3.git commit -s -m “注释”
4.git pull
5.git push
6.git status -s
7.git log —oneline
8.git branch
9.git branch <dev> //创建新分支
10.git checkout <dev> //切换分支
11.git rebase <master> //基于父分支最新节点
12.git merge <dev> //在当前分支 合并指定分支
13.git branch -d <dev>//删除指定分支(必须在父分支上进行)
14.git reset --hard <ccbc996>//回滚到指定节点
15.git stash //保存快照(移除当前未提交并保存)
16git stash pop//使用最上层快照
git初始化
$ cd /path/to/my/workspace
$ mkdir demo
$ cd demo
$ git init (初始化git版本库)
$ echo "Hello." > welcome.txt (新建txt文件,并在里面加“hello”)
$ echo "Bye-Bye." >> welcome.txt (在txt文件后面加上“bye-bye”)
提交,添加
$ git add 文件 (工作区加入到暂缓区)
$ git commit -m "注释" (暂缓区提交到版本库)
日志查询
$ git log
$ git log —stat(附加的--stat参数看到每次提交的文件变更统计)
$ git log --pretty=oneline(只有提交ID和提交注释)
* ea66f2ba8e76b86b57d932502266c3b672826e4b who does commit?
* 124307a9e3186a12c41831f27f15112422af68d0 intialized
$ git log --pretty=raw --graph e695606 (可以查询到任意一次提交之前的提交跟踪链)
$ git log --graph --oneline
* a0c641e who does commit?
* 9e8a761 initialized.
状态查询
$ git status -s (显示精简格式的状态输出)
M welcome.txt (版本库中的文件和处于中间状态——提交任务(提交暂存区,即stage)中的文件相比有改动。)
M welcome.txt (工作区当前的文件和处于中间状态——提交任务(提交暂存区,即stage)中的文件相比也有改动。)
MM welcome.txt (不但版本库中最新提交的文件和处于中间状态 —— 提交任务(提交暂存区, stage)中的文件相比有改动,而且工作区当前的文件和处于中间状态 —— 提交任务(提交暂存区, stage)中的文件相比也有改动。)
$ git status -s -b (-s精简输出 -b显示当前工作分支的名称)
## master
版本库和缓存区、工作区的文件差异
$ git diff (工作区和缓存区)
$ git diff HEAD 或者 $ git diff master(工作区和HEAD)
$ git diff --cached 或者是 $ git diff --staged 或者是$ git diff --cached HEAD (缓存区和工作区)
查看HEAD(版本库中当前提交)指向的目录树
$ git ls-tree -l HEAD
100644 blob fd3c069c1de4f4bc9b15940f490aeb48852f3c42 25 welcome.txt
* 使用-l参数,可以显示文件的大小。上面welcome.txt大小为25字节。
* 输出的welcome.txt文件条目从左至右,第一个字段是文件的属性(rw-r–r–),第二个字段说明是Git对象库中的一个blob对象(文件),第三个字段则是该文件在对象库中对应的ID——一个40位的SHA1哈希值格式的ID(这个会在后面介绍),第四个字段是文件大小,第五个字段是文件名。
显示暂存区的目录树
$ git ls-files -s
100644 18832d35117ef2f013c4009f5b2128dfaeff354f 0 a/b/c/hello.txt
100644 51dbfd25a804c30e9d8dc441740452534de8264b 0 welcome.txt
后退修改
$ git clean -fd (清除当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录))
$ git checkout . (用暂存区内容刷新工作区)
$ git stash (用版本库刷新暂存区和工作区)
重置reset
$ git reset --hard HEAD^ (将master重置到前一次提交)
$ git reset --hard 9e8a761 (重置到任意一次提交)
挽救错误的重置reflog
$ git reflog show master | head -5
124307a master@{0}: reset: moving to 124307a
343f2f8 master@{1}: reset: moving to HEAD^
921f323 master@{2}: commit: doed master follow this new commit?
343f2f8 master@{3}: commit: which version checked in?
ea66f2b master@{4}: commit: who does commit?
$ git reset --hard master@{2}
HEAD is now at 921f323 doed master follow this new commit?
cat
$ git cat-file -t e695606 (查看ID的类型)
commit
$ git cat-file -p 343f2f8 (查看对象的内容)
tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9
parent ea66f2ba8e76b86b57d932502266c3b672826e4b
author Huang Shuni <15889638723@163.com> 1474440963 +0800
committer Huang Shuni <15889638723@163.com> 1474440963 +0800
which version checked in?
显示当前分支
$ git branch
* master
master/HEAD
$ git log -1 HEAD
$ git log -1 master
$ git log -1 refs/heads/master
commit 343f2f81a6ce607242f0b9d051576937935d4adf
Author: Huang Shuni <15889638723@163.com>
Date: Wed Sep 21 14:56:03 2016 +0800
which version checked in?
* 上述三者都是一样的指向,指向最近的一次提交
$ git rev-parse master
$ git rev-parse refs/heads/master
$ git rev-parse HEAD
343f2f81a6ce607242f0b9d051576937935d4adf
* 和上面的三个差不多
#######SHA1哈希值
* 40个十六进制的数字组成
* Git的提交通过SHA1哈希值作为提交ID,做到了“全球唯一”。