Git 工作流程如下:

  1. 在工作目录中修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域。
  3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

git config

  1. git config --system 将配置保存在 /etc/gitconfig 文件中,对系统中所有用户都适用
  2. git config --global 将配置保存在用户目录下,仅对该用户适用
  3. git config          将配置保存在当前目录的 .git/config 文件夹下,仅对当前目录有效

每一个级别的配置都会覆盖上层的相同配置。

用户信息

  • git config --global user.name "aco Yang"
  • git config --global user.email wwsxuan@163.com

查看配置信息

  • git config --list

获取 git 仓库

  • git init
  • git clone  [rename]  // rename 代表项目名为 rename 默认和仓库中一致

git add 的效果

  1. 对于未跟踪文件(untracked file),将文件放入暂存区,并开始跟踪文件
  2. 对于已跟踪文件且进行了修改的文件,将文件的修改放入暂存区

文件忽略

配置 .gitignore 即可,格式规范

  1. 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
  2. 可以使用标准的 glob 模式匹配。
  3. 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  4. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。

文件提交

  • git add  & git commit -m 'commit content'  分两步提交,先暂存后提交
  • git commit -a -m 'commit content'    提交所有已跟踪的文件,不需要暂存了,但不会提交新加入的文件

日志

git log

常用控制输出内容的选项

选项 说明
-p 按补丁格式显示每个更新之间的差异。
--word-diff 按 word diff 格式显示差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
--oneline --pretty=oneline --abbrev-commit 的简化用法。

常用控制输出内容数量的选项

选项 说明
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。

文件的取消

  1. 撤销已暂存的文件(通过 git add 添加)到工作环境,git reset HEAD
  2. 撤销还在工作环境下的文件(还未 git add),git checkout --

git 远程仓库

常用命令

  • git clone                        克隆远程仓库到本地
  • git remote                     显示远程仓库地址
  • git remote -v                显示仓库地址详情
  • git remote add             添加一个新的远程仓库
  • git remote show          显示远程仓库的信息
  • git remote rename      修改远程仓库的简称
  • git remote rm              删除对应的远程仓库
  • git fetch                        从给定的远程仓库拉取数据,并不合并数据
  • git push                        推送特定分支到特定远程仓库上
  • git pull                         从特定远程仓库拉取特定分支到本地并合并

git 标签

  • git tag                                                  列出所有的标签
  • git tag -l 'v1.*'                                     列出所有符合条件的标签
  • git tag v1.4                                          为当前 commitId 打一个标签(轻量级标签)
  • git tag -a v1.4 -m 'my version 1.4'   添加一个带附注的标签
  • git tag -s v1.4 -m 'my version 1.4'   添加一个带签名的标签

git 分支

分支仅仅是一个 commit 的引用

  • git branch                                   列出所有分支
  • git branch -v                              列出所有分支并带提交信息
  • git branch --merged                 列出已被当前分支合并的分支
  • git branch --no-merged           列出还未被合并的分支
  • git branch -d                              删除分支

git stash

将当前对于文件的修改存储,不适合 commit 但需要切换分支的情况下,就需要使用 git stash 。

  • git stash                                        储存当前工作区中的文件修改到暂存栈中
  • git stash list                                  列出在暂存栈中的所有暂存
  • git stash apply [stash@{}]         应用暂存,默认暂存栈中的第一项
  • git stash apply --index               应用暂存,之前被 add 过的文件会被 add
  • git stash drop [stash@{}]          移除暂存,默认暂存栈中的第一项

git commit

  • git commit                                           将暂存区中的内容提交,会开启编辑模式,确定提交信息
  • git commit -m 'commit msg'            确定提交信息后,直接提交
  • git commit -a -m 'commit msg'        将工作区中的内容提交
  • git commit --amend                           提交暂存区,并修改提交内容,不会生成新的提交记录

git 调试

感觉一般上用不太到

  • git blame                               查看文件的修改记录
  • git bisect start                      启用二分查找
  • git bisect bad                        查找前标记当前 commit 为 bad 状态
  • git bisect good v1.0             标记一个对的 commit 的记录,之后 git 就会开始二分查找,会将文件状态恢复到一定状态
  • git bisect good                      将当前标记点标记为 good 状态
  • git bisect bad                        将当前标记点标记为 bad 状态
  • git bisect reset                      将文件恢复到最开始的状态

git bisect 命令用于查找从一个文件状态对的开始到最终状态,使用二分查找,即当开始查找时,文件恢复到对应状态后,查看代码,确定对错后在命令行输入 git bisect good/bad git 就会根据你的输入在从对应的提交历史中取出一份,恢复到工作区,然后在查看代码确定对错,在命令行输入,最终可以得出是那次提交出的问题,最后调用 git bisect reset 将文件恢复到最开始的状态,改 bug 。

git 终极了解命令

查看命令文档可以充分了解命令效果,有两种方式查看。比如我想看 git status 具体是什么

  1. git help status
  2. man git-status