赞
踩
git的配置文件包括3个层级,分别是系统级(system)
,用户级(global)
和项目级(local)
。低层级的配置会覆盖高层级
系统级:对所有用户生效。位置在git安装目录/etc/gitconfig
用户级:对当前用户生效。位置在~/.gitconfig
项目级:在当前项目文件夹内生效。位置在项目根目录/.git/config
查看配置
// 查看所有生效的配置文件
git config --list
// 查看特定作用域的配置
git config --<层级> --list
修改配置
git config --<层级> user.name "user"
删除配置
git config --<层级> --unset user.name
常用的配置信息
// 用户信息 git config --global user.name "xiaoli" git config --global user.email "xiaoli@sina.com" // 设置默认编辑器 git config --system core.editor "vim" // 指定diff工具。虽然git内置了diff工具,但也支持自定义 # 查看合并和解决冲突的工具列表 git mergetool --tool-help # 设置差异分析工具 git config --global merge.tool vimdiff // 中文显示。在默认设置下,git status 查询的中文文件名不能正确显示,可设置改正 git config --global core.quotepath false // 指定代理 http.proxy=http://127.0.0.1:7897 https.proxy=http://127.0.0.1:7897
本地初始化
// 在当前文件夹创建git项目
git init
// 在指定目录创建git项目
git init <文件名>
从远端项目初始化
git clone <url> [文件名]
gitignore有多个文件来源,依次顺序为:
- 从命令行中读取可用的忽略规则
- 当前目录定义的规则
- 父级目录定义的规则,依次递推(推荐放在git项目根目录)
- $GIT_DIR/info/exclude 文件中定义的规则
- core.excludesfile中定义的全局规则
对比工作区和暂存区差异:git diff
对比工作区和版本库差异:git diff HEAD
对比暂存区和版本库差异:git diff --cached
一些option:
只查看文件名差异,而不看具体内容:--stat
可以使用git status
查看文件状态
状态 | 颜色提示 |
---|---|
未追踪 | Untracked files,红色 |
已修改 | modified,红色 |
已暂存 | 绿色 |
未修改,已提交 | 不显示 |
查看工作区文件:直接查看
查看暂存区文件:git ls-files [--stage]
查看版本库文件:git ls-tree -r HEAD
工作区存在一份文件。当提交之后,暂存区也存在同样的一份文件。
暂存文件
// 提交所有文件
git add .
// 提交指定文件
git add <文件名>
删除暂存区的文件
注意是删除文件,不是删除修改。删除后的文件会变成未追踪状态。
// 删除指定文件。
git rm --cached <file>
同时删除工作区和暂存区的文件
// 同时删除指定文件
git rm <file1> <file2> ...
撤销工作区的修改(使用暂存区覆盖)
checkout意思为检出,在这里表示取出暂存区的内容覆盖工作区。
注意:只覆盖暂存区对应的文件,如暂存区有文件file1,而工作区有文件file1和file2。则执行之后,只有file1被覆盖,file2不变。
// 若文件未放入暂存区,则恢复到版本库状态。若文件暂存之后还修改,则恢复到暂存时的状态。
git checkout -- <file>
若想要完全移除暂存区的修改(也就是git status中的绿色文件变为红色),可以使用git reset
命令
// 完全移除暂存区文件。等效为用版本库覆盖暂存区。若文件之前是未追踪,则也恢复成未追踪。注意后跟文件时,版本库不会发生变化。
git reset <file>
提交文件
将暂存区的文件提交至版本库。提交之后,生成版本号。
// 从暂存区提交
git commit -m "提交描述"
// 直接从工作区提交
git commit -a -m "提交描述"
// 修改提交备注。提交,生成新的版本号,与上一次的提交合并。
git commit --amend
使用版本库覆盖文件
可以使用版本库中的文件覆盖当前工作区和暂存区的文件。
// 【慎重使用】退回HEAD指向的版本,并覆盖暂存区和工作区(和版本库)
git reset --hard HEAD
// 【默认】退回HEAD指向的版本,并覆盖暂存区(和版本库)
git reset --mixed HEAD
// 退回HEAD指向的版本,并覆盖版本库
git reset --soft HEAD
git每一次的commit都会生成版本,对应唯一的commit-id。
版本回退reset
reset用于回退到某一个版本(包括当前版本)或者分支,然后覆盖工作区或者暂存区(参考上文)。
// 利用commit-id回退版本
git reset <commit-id>
// 利用HEAD回退
git reset HEAD // 回退到当前版本
git reset HEAD^ // 回退到上一个版本
git reset HEAD~<n> // 回退到前n个版本
// 切换到branch的最新提交
git reset <branch-name>
版本回退revert(逆操作提交)
// 执行commit-id的逆操作,并生成新的commit-id。注意,①未暂存的文件和修改需要先暂存,②已暂存的文件可能存在冲突,需要解决冲突。
git revert -n <commit-id>
// 查看分支信息
git branch -vv
// 查看分支图
git log --oneline --decorate --graph
// 创建一个新分支
git branch <new-branch>
// 创建并切换分支
git checkout -b <new-branch>
// 创建临时分支,查看某commit-id的内容
git checkout <commit-id>
git checkout <branch-name>
当分支切换时,存在以下几种情况
对分支切换的一种简单理解:
git status
显示的修改,包括:未追踪、已修改、已暂存三种类型的操作。当切换分支时报错,但必须切换分支时,可以利用stash解决。stash是一个可以保存工作区和暂存区工作状态的栈。当不得不切换分支时,可以先将当前工作区和暂存区存入stash栈,之后再需要时将工作状态出栈。
存(入栈)
// 入栈
git stash
// 入栈并注释
git stash save "注释"
取(出栈)
注意取出时,若本地工作区或者暂存区存在修改文件,则可能发生错误导致终止。
若本地修改且已经提交新版本,取出时若存在冲突需要解决。
// 取出并从栈中删除
git stash pop stash@{<栈编号>}
// 应用栈,但不从栈中删除
git stash apply stash@{<栈编号>}
清除栈
// 清除特定的栈快照
git stash drop stash@{<栈编号>}
// 清空栈
git stash clear
查看栈
// 显示整个栈结构
git stash list
// 显示栈的具体修改内容,默认为栈顶的修改
git stash show -p stash@{<栈编号>}
合并分支通常有两种方式:分别是merge
和rebase
。两种分支的区别如图所示。
冲突解决
在分支合并的过程中,如果两个分支修改了同一个文件的同一行代码,则会产生冲突。
解决冲突的过程包括(不确定):
// 1 手动编辑冲突文件
vim <conflicted files>
// 2 添加冲突文件到暂存区,并重新提交
git add ... git commit ...
// 3 继续合并
git merge <new-branch>
// 删除本地分支
git branch -d <new-feature>
先挖坑,有空再写
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。