配置
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
/etc/gitconfig文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行git config时带上--system选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)~/.gitconfig或~/.config/git/config文件:只针对当前用户。 你可以传递--global选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。- 当前使用仓库的 Git 目录中的
config文件(即.git/config):针对该仓库。 你可以传递--local选项让 Git 强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)
每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
git config core.autocrlf false 禁止换行符转换
git config merge.conflictstyle diff3 更改冲突文件冲突标记,显示公共祖先(未修改版本)。
git config merge.tool vimdiff 更改差异分析工具
有kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具
git config user.name "John Doe" 更改用户名
git config user.email johndoe@example.com 更改email
git config core.editor "vim" 使用vim编辑器
--global 更改全局配置文件
查看配置信息
git config [kay] [value]
--list 命令来列出所有 Git 当时能找到的配置
--show-origin 查看他们所在文件
通用
获取帮助
--help 详细
-h 简略
特殊符号
\* 通配符
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推...
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
- 以此类推...
head可以替换成commit
仓库
创建仓库
git init
克隆仓库
git clone oldRegisterUrl newRegisterName
remote
git remote
add [name] url 添加远程仓库
show [name] 查看远程仓库的更多信息
rename oldname newname 远程仓库的重命名
remove name 删除远程仓库
分支
branch
git branch [brandchName] 新建分支
-d branchName 删除分支
-v 查看最后一次提交
-vv 查看设置的所有跟踪分支
-u [remote/branch] 跟踪远程分支
--unset-upstream 取消跟踪
--merged 已经合并到当前分支的分支
--no-merged 尚未合并到当前分支的分支
checkout
git checkout [branchName]
-b newBranchName [remote/branch] 创建新分支[并追踪远程分支]
-- file 用最近提交的版本覆盖掉它,任何修改都会消失
reset
git reset [--soft | --mixed 默认| --hard] [HEAD] [SHA-1 校验和] [file]
soft 更新head 和 当前分支指针 指向指定版本 mixed 更新指针和暂存区 hard 更新指针、暂存区和工作区间
工作
add
git add [file1] [file2]
-- all 添加所有变化到索引(暂存区)
restore
git restore [file] 会撤销文件的修改,撤销到最近一次执行git add的内容。
--staged 把文件从暂存区移除,文件的修改不会受影响
commit
git commit [file1] [file2]
-m [message]
-a 相当于提前执行一次git add --all
--amend 覆盖前一次提交
mv
git mv [oldFile] [newFile]
-f 强制执行
stash
贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。
git stash 储藏
list 查看储藏内容
apply stash@{number} 应用储藏内容
drop stash@{number} 移除储藏
--keep-index 它告诉 Git 不仅要贮藏所有已暂存的内容,同时还要将它们保留在索引中。
-u Git 也会贮藏任何未跟踪文件
--all 也会储藏被忽略文件
-q 安静模式
rm
git rm [file] 从暂存区和工作区中删除
-f 强制删除已暂存文件
--cached 取消暂存,追踪
-r 递归
clean
从工作区中移除不想要的文件
-n 选项来运行命令, 这意味着“做一次演习然后告诉你 **将要** 移除什么”。
-d 命令来移除工作目录中所有未追踪的文件以及空的子目录
-f 意味着“强制(force)”或“确定要移除”,使用它需要 Git 配置变量 `clean.requireForce` 没有显式设置为 `false`。
-i 交互模式
-x 移除忽略文件
分析工具
status
-s 得到简短输出结果
diff
git diff [file] [branch] 比较工作目录中当前文件和暂存区域快照之间的差异
--cached/staged 查看暂存区快照与上次提交的差异[版本库]
branch1...branch2 显示自branch2与branch1 分支的共同祖先起,branch2分支中的工作。
brandh1 branch2 查看两个分支最新提交的差异
--check 检查空白错误
-b 忽略空白字符差异
blame
git blame [file] 查看指定文件的修改历史
log
git log
-number 限制显示的日志条目数量
--authoer userName 查看某人的提交历史
-p 按补丁格式显示每个提交引入的差异。
--graph 在日志旁以 ASCII 图形显示分支与合并历史。
--oneline --pretty=oneline --abbrev-commit 合用的简写。
--stat 显示每次提交的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。
--relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。
仅显示最近的 n 条提交。
`--since`, `--after`
仅显示指定时间之后的提交。
`--until`, `--before`
仅显示指定时间之前的提交。
`--author`
仅显示作者匹配指定字符串的提交。
`--committer`
仅显示提交者匹配指定字符串的提交。
`--grep`
仅显示提交说明中包含指定字符串的提交。
`-S`
仅显示添加或删除内容匹配指定字符串的提交。
合并
merge
git merge [branch] [commit]
--abort 恢复到你运行合并前的状态
-Xignore-space-change 忽略空白
rebase
原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。
如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。
git rebase objectBranch [operatedBranch]
例子:
现在ceperiment指向c4
$ git checkout experiment
$ git rebase master
远程仓库交互
pull
自动抓取后合并该远程分支到当前分支
git pull <远程主机名> <远程分支名>:<本地分支名>
fetch
只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。
$ git fetch <remote>
push
git push <remote> <branch>
git push remote --delete branch 从服务器上删除 分支
工具
tag
git tag
-l [可使用通配符]
-a [versionName] 创建标签
-d versionName 删除标签
git push origin --delete <tagname> 删除远程仓库标签
grep
git grep string
从提交历史、工作目录、甚至索引中查找一个字符串或者正则表达式
-n 显示行号
-c 输出概述信息
-p 输出上下文