git笔记
Contents
命令补全
cp contrib/completion/git-completion.bash /etc/bash_completion.d/
. /etc/bash_completion
在/etc/profile和~/.bashrc 添加以下内容
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
中文乱码
UTF-8 字符集时
git config --global core.quotepath false
GBK字符集时
git config --global i18n.logOutputEncoding gbk
git config --global i18n.commitEncoding gbk
配置用户
git config --global user.name "your name"
git config --global user.email "your email"
git config --global color.ui true
建立别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
缓存http验证
# 单位是秒
git config --global credential.helper "cache --timeout=3600"
初始化git
cd /path/to/git/rep
git init
或者
git init dirName
自动创建dirName目录并初始化git.
这个目录,就叫工作区
添加文件到版本管理
git add file
git commit -m "commit desc"
搜索git版本控制文件包含的内容
git grep "要搜索的内容"
定位.git
目录位置
假设你在git的某个比较深层的目录,但忘记了git工作区的根目录
git rev-parse --git-dir
git rev-parse --show-toplevel
显示相对于工作区根目录的目录
git rev-parse --show-prefix
显示从当前目录,进入到工作区的根的深度
git rev-parse --show-cdup
一次性回到工作区的根目录:
cd `git rev-parse --show-cdup`
修改配置信息
git config -e : 将打开工作区的配置文件 /workding/.git/config
git config -e --global: 将打开用户home目录的git配置文件 ~/.gitconfig
git config -e --system: 将打开系统配置git的配置文件 /etc/gitconfig
git log
git log --stat
: 显示变更统计
git log --pretty=oneline
: 按一行一次显示提交日志
简要显示status
git status -s
git diff
git diff
: 工作区与暂存区的比较
git diff HEAD
: 工作区与版本仓库的比较(当前工作分支)
git diff --cached
: 暂存区与版本仓库的比较
git 命令对暂存区影响
git reset HEAD
: 暂存区的目录树会被master分支指向的目录树所替换,但工作区不受影响
git rm --cached <file>
: 从暂存区删除文件,工作区不做出改变
git checkout .
或者 git checkout -- <file>
: 用暂存区的文件,替换工作区的文件.
git checkout HEAD
或者 git checkout HEAD <file>
: 用HEAD所指向的分支中的文件替换暂存区和工作区中的文件.
git reset --hard <commitid>
: 替换引用的指向,替换暂存区,替换工作区
git reset --soft <commit>
: 替换引用的指向,不改变暂存区,不改变工作区
git reset --mixed <commit>
或git reset <commit
:替换引用的指向, 替换暂存区,但不改变工作区.
重置
`git log --graph --oneline`
`git reset --hard HEAD^` : 这个命令会破坏工作区未提交的改动,慎用.
`git reset --hard commitid`
恢复错误的重置
要确认这个参数是开启的:
git config core.logallrefupdates
查看所有操作日志
git reflog show master | head -5
然后恢复:
git reset --hard master@{2}
:引用master之前第2次改变时的SHA1哈希值
或者直接
git reset --hard sha1id提交id
git checkout
git checkout branch
:检出branch分支,更新HEAD引用,以及用branch的指向树,更新暂存区和工作区.
git checkout
: 汇总显示工作区,暂存区和HEAD的差异
git checkout HEAD
: 汇总显示工作区,暂存区和head的差异
git checkout -- filename
:用暂存区中的文件filename和覆盖工作区中的filename.
git checkout branch -- filename
:维持HEAD指向不变,用branch所指向的提交中的filename替换暂存区和工作区中的相应的文件。
git checkout -- .
或 git checkout .
: 用暂存区的所有文件直接覆盖工作区的所有文件.
git stash
git stash
: 保存当前的工作进度,(暂存区和工作区)
git stash list
: 列出进度列表
git stash pop [--index] [<stash>]
: 不使用参数的话,会恢复最新保存的工作进度,并从进度列表中删除。
[stash]参数(来自 git stash list
显示的列表,则从该stash恢复,恢复完后从进度列表中删除该stash.
--index
参数:除了恢复工作区的文件,还尝试恢复暂存区。
`git stash [save [–patch] [-k | –[no-]keep-index] [-q | –quiet] [
git stash save 'message'
git stash apply [--index] [<stash>]
:除了不删除恢复的进度之外,和git stash pop
一样
git stash drop [<stash>]
:删除一个进度,默认删除最新.
git stash clear
:清空进度列表
git stash branch <branchname> <stash>
: 基于进度创建分支.
文件追溯 git blame
git blame filename
:逐行显示文件
只看某几行:
git blame -L 6,+5 fileName
定位问题提交的commitid
它是利用二分查找法来定位的。
步骤:
git bisect start 坏提交的commitid 好提交的commitid
git bisect run ./test.sh
:执行测试脚本.正常时返回0, 如果是125,则被跳过,1到127(除了125)就是bad.