【查看git版本(2.19.2.windows.1)】
git --version
git --exec-path(获取git的执行目录)
【版本库配置项】
git config user.name "licong"
git config user.email "licong@ossxp.com"
git config color.ui true
git config --unset user.name(取消配置项)
git config --unset user.email(取消配置项)
【用户级别配置】
git config --global user.name "licong"
git config --global user.email "licong@ossxp.com"
git config --global color.ui true
git config --unset --global user.name
git config --unset --global user.email
【系统级别配置】
git config --system user.name "licong"
git config --system user.email "licong@ossxp.com"
git config --system color.ui true
git config --unset --system user.name
git config --unset --system user.email
【config备注】
描述:git config[--global]|[--system],不加global和system代表当前版本库配置,global代表当前用户配置,system代表系统级配置。git config 修改的是/.git/config文件
【配置别名】
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
【初始化版本库】
git init
【Git添加暂存区】
git add -u(将本地文件变更(修改、删除)全部记录到暂存区中)
git add -A (将本地所有改动及新增文件添加到暂存区中)
git add -i (进入交互式页面)
git add .
git add -f welcome.txt(添加忽略文件到暂存区)
【Git rev-parse】
git rev-parse --git-dir(显示版本库.git目录所在位置)
git rev-parse --show-toplevel(显示工作区根目录)
git rev-parse master(查看引用对应的提交id)
git rev-parse refs/heads/master(查看引用对应的提交id)
git rev-parse master HEAD
git rev-parse --symbolic --branches (显示分支)
【Git提交】
git commit --allow-empty -m "who does commit"(允许空提交)
git commit --amend --allow-empty --reset-author (最新的提交,修改作者、提交者)
【Git重置命令】
git reset [-q] [ ] [--] ...
git reset [--soft|--mixed|--hard|--merge|--keep] [-q] [commit]
上面列出了两种用法,[commit]是可选项,可以使用引用或者提交ID,如果省略 则相当于使用了HEAD的指向作为提交ID。
上面列出的两种用法区别在于,第一种用法在命令中包含路径 。为了避免路径和引用(或者提交ID)同名而发生冲突,可以在 前用两个连续的短线作为分隔。
第一种用法(包含路径 的用法)不会重置引用,更不会改变工作区,而是用指定提交状态( )下的文件替换掉暂存区中的文件。例如命令:git reset HEAD 相当于取消之前执行的 git add 命令时改变的暂存区。
第二种用法则会重置引用。根据不同的选项,可以对暂存区或工作区进行重置。
git reset --hard 1.替换引用指向,2.替换暂存区,3.替换工作区
git reset --soft 只更改引用的指向,不更改暂存区和工作区
git reset --mixed 1.更改引用指向,2.重置暂存区,工作区不改变
【用reflog挽救错误的重置】
git config core.logallrefupdates(确认版本库,是否开启分支日志功能)
git reflog show master | head -5
git reset --hard master@{2} (master@{2}:master分支第2次改变时的SHA1哈希值)
【Git检出】
分离头指针:指的是HEAD头指针,指向了一个具体提交ID,而不是一个引用(分支)
git checkout [-q] [commit] -- ....
git checkout [branch]
git checkout [-m] [[-b|--orphan] <new_branch>] [<start_point>]
上面列出的第一种用法和第二种用法的区别在于,第一种用法命令中包含路径 。为了避免路径和引用(或者提交ID)同名而发生冲突,可以在 前面用两个连续的短线作为分隔。
第一种用法的 是可选项,如果省略则从暂存区(index)进行检出。重置的默认值是HEAD,而检出的默认值是暂存区。因此重置一般用于重置暂存区,而检出命令主要覆盖工作区(如果 不省略,也会替换暂存区中的文件)
第一种用法不会改变HEAD头指针,主要是用于指定版本的文件覆盖工作区中对应的文件。如果省略commit,则会用暂存区的文件覆盖工作区的文件,否则用指定提交中的文件覆盖暂存区和工作区中对应的文件。
第二种用法会改变HEAD头指针。之所以后面的参数写作 ,是因为只有HEAD切换到一个分支才可以对提交进行跟踪,否则仍然会进入“分离头指针”的状态。在“分离头指针”状态下的提交不能被引用关联到,从而可能丢失。所以用法二最主要的作用是切换分支,如果省略 ,则相当于对工作区进行状态检查
【Git Stash(暂存工作进度)】
git stash save "message"
保存工作进度,会分别对暂存区和工作区的状态进行保存
git stash list(查看保存的进度)
git stash pop --[index] [ ]
如果不使用任何参数,会恢复最新保存的工作进度,并从工作进度列表中清除
如果提供 参数(来自于git stash list 显示的列表),则从 中恢复。
选项除了恢复工作区文件外,还尝试恢复暂存区。
git stash apply --[index] [ ]
除了不删除工作进度之外,其余和git stash pop命令一样
git stash drop [ ]
删除一个工作进度,默认删除最新的
git stash clear
删除所有工作进度
git stash branch
基于进度创建分支
【Git 里程碑】
git tag -m "create new tag" v1.0
里程碑也是一个引用,通过记录提交ID,来为当前版本库的状态留影
git describe命令将最新提交显示为一个易记名称。显示的时候会选取离该提交最近的里程碑作为“基础版本号”,后面附加标识距离“基础版本号”的数字,以及该提交SHA1哈希值的缩写。
【Git清除命令】
git clean -nd(测试运行,查看哪些文件或目录被删除)
git clean -fd(清除当前工作区中,没有加入版本库的文件和目录)
git rm 1.txt 2.txt 3.txt(git删除文件)
【恢复删除的文件】
git cat-file -p HEAD~1:welcome.txt > welcome.txt
git show HEAD~1:welcome.txt > welcome.txt
git checkout HEAD~1 -- welcome.txt
【移动文件】
git mv welcome.txt README(文件重命名)
【Git日志命令】
git log --pretty=fuller(打印全部日志)
git log --stat(统计提交文件变更)
git log --pretty=oneline(日志信息展示一行)
git log -l --pretty=raw --graph --stat(日志详细输出)
git log --graph --oneline(--oneline参数在Git1.6.3及以后版本才有)
git log --oneline --decorate -4(该命令可以显示,提交对应的里程碑,decorate 可以在提交ID旁边显示该提交关联的引用)
【Git查看工作空间状态】
git status -s(精简格式)
git status --ignored -s(查看忽略文件)
【Git比较命令】
git diff(工作区与暂存区比较)
git diff HEAD(工作区与当前分支比较)
git diff --cached(暂存区与版本库中文件比较)
【查看文件时间戳】
ls --full-time .git/index
【删除暂存区文件】
git rm --cached
【查看暂存区、版本库目录树】
git ls-tree -l HEAD (查看当前分支目录树;-l显示文件大小)
git ls-tree -l(查看暂存区目录树;)
【Git查看对象类型】
git cat-file -t cd6ff3(根据id查询对象的类型)
【Git查询对象内容】
git cat-file -p cd6ff3
【Git提供了很多方法可以方便的访问Git库中的对象】
采用部分SHA1哈希值, 不必把40位全部写全,只取开头部分(4位以上 )
使用HEAD代表版本库中最近一次提交
符号 ^ 可以用于指代父提交【HEAD^代表版本库中上一次提交;HEAD^^代表版本库中上两次提交】
对于一个提交有多个父提交,可以在符号 ^ 后面数字表示是第几个父提交。HEAD^2
符号~ ,也可以用于指代祖先提交。a107354~5,及相当于a107354^^^^^
提交所对应的树对象,可以用如下语法访问a107354^{tree}
某一次提交对应的文件对象,可以用如下语法访问a107354^:/path/to/file
暂存区中的文件对象,可以用如下语法访问:/path/to/file