命令补全

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.