Git常用命令

Git 配置

Git 配置变量存放在以下三个不同的地方:(摘自1.5 起步 - 初次运行 Git 前的配置

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
1
2
3
4
$ git config --global user.name "Sanyucz"
$ git config --global user.email kingxiubin@gmail.com

要检查已有的配置信息,可以使用 git config --list 命令

暂存

1
2
3
4
5
6
// 暂存
git stash
// 查看所有暂存信息
gi stash list
// 恢复 stash@{0}
git stash apply stash@{0}

创建、删除版本库

版本库(仓库repository)的创建和文件添加与提交

1
2
3
4
5
6
7
8
// 初始化仓库
git init
// fileName 是要添加的文件 添加所有可以用通配符 *
git add <fileName>
// 提交到本地,message是提交的信息
git commit -m "<message>"
// 删除本地仓库
find . -name ".git" | xargs rm -Rf

查看版本库和文件信息

1
2
3
4
5
6
7
8
9
10
11
12
// 查看仓库状态: git status
git status
// 如果要查看具体内容:git diff
git diff readme.txt
// 查看conmmit的历史记录:git log
git log
// 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:
git log --pretty=oneline
// 查询历史命令:git reflog
git reflog
// 查看工作区和仓库文件的区别
git diff HEAD -- < fileName >

版本回退和撤销修改

1
2
3
4
5
6
7
8
// 回退上一版本:
git reset --hard HEAD^
// 回退指定版本:3628164 是用 git log 查询出来的版本数值
git reset --hard 3628164
// 放弃修改文件
git checkout -- file
//可以把已被添加到暂存区的 'file' 移到工作区
git reset HEAD file

远程仓库和分支管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 克隆远程仓库
git clone <url>
// 添加远程仓库
git remote add origin https://github.com/sanyucz/cocoachina-ios-app.git
// 设置默认远程仓库 -u : --set-upstream
git push -u origin master
// 删除远程仓库
git remote rm origin
// 创建dev分支,然后切换到dev分支:
git checkout -b dev
// 和下面两条命令等同:
git branch dev
git checkout dev
// 查看当前分支:
git branch
// 把 'dev' 分支合并到主分支然后再删除 'dev' 分支
git merge dev
git branch -d dev
// 删除远程分支:(其实是把一个空分支push到远程某个分支)
git push origin :dev

撒销一个合并

1
2
3
4
5
6
7
// 如果你想把当前的修改都放弃,可以用下面的命令回到合并之前的状态:
git reset --hard HEAD
// 如果你已经把合并后的代码提交,但还是想把它们撒销:
git reset --hard ORIG_HEAD
// 再如果你不光把代码提交,你提交之后又做了新的修改,又不想放弃修改
// HEAD 合并的那个 版本号
git revert -m 1 HEAD

标签

1
2
3
4
5
6
7
8
9
10
git tag v1.0 // 打标签到当前分支最新的 commit 上
git tag v0.9 6224937 // 打标签到当 head 为 6224937 的 commit 上
git tag // 查看标签
git show <tagname> // 查看标签信息
git tag -a v0.1 -m "version 0.1 released" 3628164 // -a指定标签名,-m指定说明文字
git tag -d v0.1 // 删除标签
git push origin <tagname> // 推送某个标签到远程
git push origin --tags // 推送到远程的本地标签
git tag -d v0.9 // 加上下个命令删除远程的标签
git push origin :refs/tags/v0.9

配置别名

一般可以:co 表示 checkoutci 表示 commitbr 表示 branch

1
2
3
git config --global alias.st status
// 一个丧心病狂的别名配置:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

GIT 的配置

  1. /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  2. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  3. 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 / etc/gitconfig 中的同名变量。
    1
    2
    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com

Git图解

廖大的图实在是太通俗易懂了,无耻盗图ing..

Git结构示意图
Git的版本库里面有个 stage(暂存区),我们平时工作的文档目录是工作区,对文件有了修改执行 git add 命令就会把变化的文件添加到版本库的暂存区,再执行 git commit 才会把文件从暂存区添加到当前分支。
stage (暂存区)在物理上的路径是 .git/index ,文件存储的是每次的修改。

HEAD 其实是一个指向当前分支的指针,

Git HEAD指针

当创建了 dev 分支的时候,是创建了一个 dev 指针,并且直接把 HEAD 指向 dev 指针。

Git 创建分支

当合并分支的时候直接把主分支 master 指向 dev 分支。