# Git 分享 --- ## 配置 ### 设置用户信息 - git config --global user.name "yourname" - git config --global user.email yourname@example.com -- ### 配置文本编辑器 - git config --global core.editor emacs > 参考编辑器 vim, emacs -- ### 查看配置 - git config --list --- ## 概念 ### 状态  --- ## 基础 ### 创建仓库 - git init ### 克隆仓库 - git clone <项目地址> -- ### 忽略文件 ```ini # 忽略 .a 结尾的文件 *.a # 不忽略 lib.a 文件, 注意申明顺序 !lib.a # 只忽略项目根目录的 TODO 文件 /TODO # 忽略所有在 build/ 下的文件 build/ # 忽略 doc 目录下的 .txt文件,但是不忽略类似类似 doc/server/arch.txt 的文件 doc/*.txt # 忽略所有 doc 目录下的所有 pdf 文件,比如,doc/server/arch.txt 该忽略递归 doc/**/*.pdf ``` > 常用忽略配置库 https://github.com/github/gitignore -- ### 添加跟踪文件 - git add <文件名> -- ### 提交修改 - git commit -m '<提交说明>' - git commit -a -m '<提交说明>' | 参数 | 说明 | | ---- | ---------------------------- | | -m | 后面之后放提交说明 | | -a | 将已经跟踪的文件直接放暂存区 | -- ### 查看当前文件状态 - git status #### 参数说明 | 参数 | 说明 | | ----------- | -------- | | -s, --short | 简要模式 | -- ### 查看修改状态 - git diff #### 参数说明 | 参数 | 说明 | | ------------------ | ---------------- | | --cached, --staged | 查看暂存区的修改 | -- ### 移除文件 - git rm <文件名> > 直接删除项目中的文件,并从文件跟踪列表中移除 | 参数 | 说明 | | -------- | ---------------------------- | | --cached | 只是从仓库中移除,不删除文件 | -- ### 移动文件, 更名文件 - git mv <旧文件名> <新文件名> -- ### 查看提交历史 - git log | 参数 | 说明 | | -------- | ------------------------ | | -p | 追加详细的修改内容 | | -2 | 显示最后两条提交历史 | | --stat | 简要描述文件中增改的行数 | | --pretty | 自定义提交历史输出方案 | -- ### 撤销操作 - git commit --amend -- ### 取消暂存的文件 - git reset HEAD <文件名> -- ### 撤消对文件的修改 - git checkout -- <文件名> -- ### 查看远程仓库 - git remote -v -- ### 添加远程仓库 - git remote add <远程仓库名称> <远程仓库地址> -- ### 从远程仓库同步 - git fetch - git fetch [远程仓库名称] > 在 fetch 时,如果远程有新创建分支,本地是不会创建对应分支副本的 > 该操作不会修改工作目录中的内容,如果有必要,需要自行合并 -- ### 拉取远程分支 - git pull > 该操作拉取上游分支,并合并到工作分支 -- ### 推送到远程仓库 - git push - git push [远程仓库名称][本地分支名] - git push [远程仓库名称][本地分支名]:[远程分支名] -- ### 删除远程分支 - git push origin --delete <远程分支名> -- ### 查看远程仓库 - git remote show [远程仓库名称] -- ### 修改远程仓库名称 - git remote rename <旧远程仓库名称> <新远程仓库名称> -- ### 移除远程仓库 - git remote rm <远程仓库名称> -- ### 列出标签 - git tag | 参数 | 说明 | | ---- | ---------------------------- | | -l | 标签筛选,比如:-l 'v1.8.\*' | -- ### 创建标签 - git tag -a <标签名称> -m '<标签备注>' [校验和] -- ### 创建轻量标签 - git tag <标签名称> -- ### 共享标签 - git push [远程仓库名称] <标签名称> - git push [远程仓库名称] --tags -- ### 检出标签 - git checkout -b <分支名称> <标签名称> --- ## 分支 ### 查看分支 - git branch | 参数 | 说明 | | ----------- | ---------------------------- | | -v | 显示分支状态 | | --merged | 显示已经合并到当前分支的分支 | | --no-merged | 显示没有合并到当前分支的分支 | -- ### 创建分支 - git branch <分支名称> | 参数 | 说明 | | -------------------------------- | -------------------------- | | -u <远程仓库名称>/<远程分支名称> | 设置本地分支的上游分支 | | -vv | 查看本地所有分支的上游分支 | -- ### 切换分支 - git checkout <分支名称> -- ### 创建并切换分支 - git checkout -b <分支名称> - git checkout -b <分支名称> <远程仓库名称>/<远程分支名称> - git checkout --track <远程仓库名称>/<远程分支名称> > 第二、三种情况下,<远程仓库名称>/<远程分支名称> 称为:跟踪分支或上游分支 -- ### 删除分支 - git branch -d <分支名称> -- ### 合并分支 - git merge <远程仓库名称>/<远程分支名称> - git merge <本地分支名称> -- ### 分支合并冲突 > 每次在做修改前最好将主分支合并到当前工作分支上 --- ## 变基 ## 执行变基 - git rebase <分支名称> --- ## 常用技巧 - squash > 可以用于将多个提交合并成为一个(貌似不可逆) - stash > 暂存当前工作区修改过的文件