git init 初始化 git 仓库
git fsck 仓库一致性检查
git gc 压缩
git describe 显示提交易记名称(最近的里程碑名字 tag_name-<n>-ID)
git mv <file> <file> 改名操作
git rebase
对提交执行变基操作,实现将指定范围的提交嫁接到另外一个提交之上
git archive
归档打包
git archive -o <name>.zip HEAD
git archive -o <name>.zip HEAD <path>...
git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz
使用tar格式和提交ID或里程碑ID,ID会记录在文件的文件头中,可以用下面命令获取提交ID
git tar-commit-id
忽略文件或目录 export-ignore
.gitignore
作用范围是其在的目录及其子目录
git status --ignored 可以看到忽略的文件
git add -f 强制添加忽悠的文件
独享式忽悠
- 在.git/info/exclude来设置文件忽略(针对具体版本库)
- 配置变量core.excludesfile设置文件忽略(所有本地版本库)
忽略语法
* 代表任意多字符
? 一个字符
/path 忽略此目录下文件,非子目录
path/ 忽略整个目录,包括子目录
!<file/path> 不忽略
git add
git add -u 把工作区文件加到暂存区(被版本库追踪的)
git add -A 把工作区文件加到暂存区(包括未被版本库追踪的)
git add -i 选择性添加到暂存区
git status
根据文件时间戳,长度判断文件是否改变,如果时间戳改变,再看内容是否改变。文件内容保存再.git/objects目录下
| 参数 | 描述 |
|---|---|
| -s | 查看精简状态,第一列M表示:版本库和暂存区的文件比较,第二列M表示:工作区和暂存区 |
| -b | 显示当前分支名 |
git commit
git commit -e -F .git/COMMIT_EDITIMSG 重新提交(.git/COMMIT_EDITIMSG 是上次提交日志 )
git commit -a -m 偷懒提交,不用git add
git commit --amend -m 修改最新提交说明
git commit -C 提交ID 重用提交的提交说明
git log
默认是指HEAD
| 参数 | 描述 |
|---|---|
| –stat | 查看提交文件变更记录 |
| –oneline,–pretty=oneline | 查看精简日志,前面显示提交哈希值前几位,后面显示全部 |
| –graph | 查看提交关系图(树结构显示) |
| –pretty=raw | 显示commit的原始数据(parent属性) |
| –pretty=fuller | 显示作者和提交者 |
| –decorate | 显示提交关联引用 |
| - |
最近几条日志 |
| -p | 显示文件具体改动 |
git config –global alias.lg “log –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit –date=relative”
git diff
默认是把工作区和暂存区的文件做比较
git diff HEAD 把工作区和版本库的文件做比较
git diff --cached/--staged 把暂存区和版本库的文件做比较
git diff 提交ID1 提交ID2
git diff 提交ID1 提交ID2 --<paths>
–word-diff 对每个词比较
git checkout
默认是暂存区,覆盖工作区文件
git checkout ./--file 撤销工作区全部文件或某个文件未提交的修改
git checkout HEAD ./<file> 用版本库的全部或部分文件替换暂存区和工作区中的文件
创建和切换到新的分支
git checkout <new_branch> <branch>
git checkout -b test 基于当前分支新建分支test,并切换到test分支下
切换到某个提交,是分离头指针,head指向具体提交
git checkout 提交ID
汇总工作区、暂存区、与HEAD的差异
git checkout
git reset
没有指定提交,默认是HEAD
git reset HEAD <paths> 把版本库的全部文件替换暂存区的
git reset
--hard HEAD^ 替换暂存区和工作区的全部文件(重置引用指向)
--soft HEAD^ 不改变暂存区和工作区内容(仅重置引用指向)
--mixed HEAD^ 重置暂存区,不改变工作区(重置引用执行,默认是这个参数)
git rm
git rm --cached <file> 从暂存区删除文件,不影响工作区
git ls-tree、ls-files
git ls-tree -l HEAD 查看版本库的目录树(-l显示文件大小)
git ls-files -s 查看暂存区的目录树(第三个字段表示暂存区编号)
git ls-files --with-tree=HEAD^ 查看历史版本的文件列表
git write-tree可以把暂存区的目录树写入git对象库,然后用git ls-tree查看。如果是tree对象,可以加上-r -t参数显示tree树内容
git clean
git clean -fd 清除未加入版本库的文件和目录
git clean -nd 强制删除目录和文件
git stash
保存工作区和暂存区的修改,然后改动全不见了。
git stash 保存进度
save 指定说明
--patch 显示工作区和HEAD的差异
-k 不会重置暂存区
查看所以进度
git stash list
git reflog show refs/stash
从最近保存的进度进行恢复
git stash pop 会删除进度
[--index] 恢复工作区,且尝试恢复暂存区
git stash apply 不会删除进度
其他命令
git stash clear 清除所有进度
git stash branch <branch name> <stash> 基于这个进度创建分支
git对象
对象保存在.git/objects目录下,对象的40位sha1哈希值前2位作为目录,后38作为文件名
git cat-file
git cat-file -t 查看对象类型
git cat-file -p 查看对象内容
git cat-file -p HEAD^:file > file 从某个提交中恢复文件
git show HEAD^:file > file
符号
^ 指父提交
^+数字 表示第几个父提交
~+数字 指祖父提交
^{对象} 表示提交对应的对象
提交ID:file 对应提交的文件
:file 暂存区的文件
git reflog
.git/logs记录分支的变更,查看git config core.logallrefupdates是否开启。
git reflog show master 查看变更记录(<ref>@{<n>}引用之前第几次改变)
git rev-parse
git rev-parse HEAD 查看引用对应sha1哈希值
git rev-parse HEAD:file
| 参数 | 描述 |
|---|---|
| –symbolic –branches | 显示分支 |
| –symbolic –tags | 显示里程碑 |
| –git-dir | 显示版本库位置 |
| –show-cdup | 工作区目录的深度 |
| –symbolic –glob=refs/* | 显示所有引用 |
| :/“commit a” | 在提交日志中查找提交 |
git rev-list
| 参数 | 描述 |
|---|---|
| –oneline A | 显示A版本库以来所有的历史提交 |
| –oneline D F | 提交历史并集 |
| –oneline ^D F(D..F) | 排除D的历史提交 |
| –oneline D…F | 排除共同的历史提交 |
| –oneline D^@ | D的历史提交,自身除外 |
| –oneline D^! | 提交本身,不包括历史 |
git blame
显示文件内容,包括每行提交版本,提交者
-L n, m 从第n行开始,显示m行
授权
ssh-keygen -t rsa 生成公钥密钥
git config
参数
--global 全局设置
属性
user.email 邮箱
user.name 名字
alias.<name> '命令' 设置别名
core.editor "vim" 默认情况下 git 用的编辑器是 vi,设置Editor使用vim
color.ui true 开启给 Git 着色
core.quotepath false 显示中文文件名
http.postBuffer 524288000 增加Git’s HTTP buffer
默认这些配置都在 ~/.gitconfig,可以输入 git config -l 命令查看
分支
git branch
查看下本地分支情况
git branch -a
查看所有分支,包括本地和远程
git branch -r
查看远程分支
git branch test
新建分支test
git branch -d test
删除分支test
git branch -D test
强制删除分支test,如果test分支没有整合
git branch --set-upstream-to=origin/<branch> master
set tracking information for this branch
版本
git tag 查看版本
git tag v1.0 贴标签,版本控制
合并
git merge test 合并分支, 在master分支执行这命令
同步
git push origin master 本地代码推到远程 master 分支
git push -f 强推,覆盖相同的内容
git pull origin master 远程最新的代码更新到本地
git clone url 把项目 clone 到了本地
关联
git remote add origin url 与 GitHub 上的项目进行关联,origin 是给这个项目的远程仓库起的名字
git remote remove <name> 取消关联
git remote rm origin 删除关联
git remote -v 当前项目有哪些远程仓库