1. 简介
1.1. 图示
- Remote:远程仓库
- Repository:本地仓库
- Index / Stage:暂存区
- Workspace:工作区
1.2. 书籍
1.3. 博客
2. 新建代码库
2.1. git init
初始化仓库:git init [project-name]
2.2. git clone
克隆远程仓库到本地仓库:git clone < url > [project-name]
3. 设置配置信息
3.1. git config
- 显示配置列表:git config –list
- 设置用户名:git config [–global] user.name “username”
- 设置邮箱地址:git config [–global] user.email “emailadress”
- 设置UI颜色:git config [–global] color.ui
- 设置默认编辑器:git config [–global] core.editor “‘C:\Program Files (x86)\Sublime Text 3\sublime_text.exe’”
- 设置差异分析工具:$ git config [–global]merge.tool < vimdiff >
- 编辑配置信息:git config -e [–global]
3.2. ssh-key
生成、管理和转换认证密钥
- 进入~/.ssh/目录:cd ~/.ssh/
- 生成ssh key:ssh-keygen -t rsa -C “email”
- ssh-keygen(选项)
-b:指定密钥长度; -e:读取openssh的私钥或者公钥文件; -C:添加注释; -f:指定用来保存密钥的文件名; -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; -l:显示公钥文件的指纹数据; -N:提供一个新密语; -P:提供(旧)密语; -q:静默模式; -t:指定要创建的密钥类型。
4. 增加/改名/删除
4.1. git add
添加文件到暂存区
- 添加指定文件到暂存区:git add < file1 > [file2]…
- 添加指定目录到暂存区,包括子目录:git add < dir >
- 添加当前目录的所有文件到暂存区:git add < . >
4.2. git mv
- 改名文件:git mv < oldname > < newname >
4.3. git rm
- 从暂存区和工作目录移除文件:git rm < file1 > [file2]…
- 从暂存区移除文件但留在工作目录:git rm –cached < file >
4.4. git clean
从工作目录中移除没有track的文件
5. 代码提交
5.1. git commit
提交已经被add进来的改动
- 提交暂存区到本地仓库:git commit -m“message”
- 提交暂存区的指定文件到本地仓库:git commit < file > -m“message”
- 提交工作区的所有变化到本地仓库:git commit - a -m “message”
- 修改提交信息:git commit –amend
- 提交时显示所有diff信息:git commit -v
6. 远程操作
6.1. git remote
- 查看远程仓库的url和别名:git remote -v
- 查看远程仓库的详细信息:git remote show
- 增加远程仓库:git remote add < name > < url >
- 删除远程仓库:git remote rm < name >
- 改名远程仓库:git remote rename < oldname > < newname >
- 修改远程仓库的地址:git remote set-url origin [url]
6.2. git push
- 将本地分支推送到对应的远程分支:git push < origin> < branch >
- 将本地分支推送到指定的远程分支:git push [远程库名] [本地分支名] : [远程分支名]
- 删除远程仓库指定分支:git push origin –delete < branch >
- 推送所有本地分支到远程仓库:git push < origin> –all
- 强行推送当前分支到远程仓库,即使有冲突:git push [remote] –force
- 提交指定tag:git push < remote > < tag >
- 提交所有tag:git push < remote > –tags
6.3. git pull
-
取回远程仓库的变化,并与本地分支合并:git pull [remote] [branch]
-
pull request
- fork 原始仓库
- clone 自己的仓库
- 在 master 分支添加原始仓库为远程分支 git remote add upstream 远程仓库
- 自己分支开发,如 dev 分支开发:git checkout -b dev
- 本地 dev 提交
- 切换 master 分支:git checkout master,同步原始仓库:git pull upstream master
- 切换本地 dev 分支,合并本地 master 分支(已经和原始仓库同步),可能需要解冲突
- 提交本地 dev 分支到自己的远程 dev 仓库
- 现在才是给原始仓库发 pull request 请求
- 等待原作者回复(接受/拒绝)
6.4. git fetch
从远程仓库获取最新代码到本地仓库,但不merge
- 取回所有分支的更新:git fetch < origin >
- 取回特定分支的更新:git fetch < origin > < master >
6.5. git clone
从远程主机克隆到本地
- 克隆远程仓库到本地同名目录:git clone < url >
- 克隆远程仓库到指定本地目录:git clone < url > <本地目录名>本地目录名>
6.6. git fork
分叉
7. 分支操作
7.1. git branch
- 查看本地分支:git branch
- 查看远程分支:git branch -r
- 查看所有分支:git branch -a
- 创建本地分支:git branch < branch >
- 删除本地分支:git branch -d < branch >
- 重命名本地仓库分支:git branch -m < oldname > < newname >
- 本地分支关联远程分支:git branch –set-upstream-to < remote/branch > < branch >
- 新建一个分支,与指定的远程分支建立追踪关系:git branch –track < branch > < remote-branch >
7.2. git checkout
- 切换到上一个分支:git checkout -
- 切换到指定分支,并更新工作区:git checkout < branch >
- 新建一个分支,并切换到该分支:git checkout -b < branch >
- 新建一个分支,指向某个tag:git checkout -b < branch > < tag >
7.3. git merge
- 合并指定分支到当前分支:git merge < branch >
7.4. git rebase
衍合,类似git merge。 目的是把解决分支补丁同最新主干代码之间的冲突的责任,划转给由提交补丁的人来解决。 作为维护项目的人只需要根据你提供的仓库地址做一次快进合并,或者直接采纳你提交的补丁。
- 衍合指定分支到当前分支:git rebase < branch >
7.5. git tag
会在一个提交上建立永久性的书签,通常是发布一个release版本之后添加
- 列出所有tag:git tag
- 新建一个tag在当前commit:git tag [tag]
- 新建一个tag在指定commit:git tag [tag] [commit]
- 删除本地tag:git tag -d [tag]
- 删除远程tag:git push origin :refs/tags/[tagName]
- 查看tag信息:git show [tag]
7.6. git stash
保存当前工作进度,把暂存区和工作区的改动保存起来
- 查看保存进度的列表:git stash list
- 保存当前工作进度,并添加一些注释:git stash save -a“message”
- 恢复指定的进度到工作区,并删除当前进度:git stash pop [stashid]
- 恢复指定的进度到工作区,不删除当前进度:git stash apply [stashid]
- 删除指定的stash:git stash drop [stashid]
- 删除所有的stash:git stash clear
8. 查看信息
8.1. git status
查看工作区、暂存区中文件的状态
8.2. git log
- 显示当前分支的版本历史:git log
- 搜索提交历史,根据关键词:git log -S [keyword]
- 显示过去n次提交:git log -n –pretty –oneline
- 只显示指定文件的日志信息:git log < file >
- 显示指定文件相关的每一次diff:git log -p < file >
- 只显示提交信息的第一行:git log –pretty=short
- 以图形模式显示:git log –graph-
- 显示所有提交过的用户,按提交次数排序:git shortlog -sn
8.3. git relog
查看所有分支的所有操作记录(包括提交、回退、已删除的提交操作记录等)
8.4. git diff
- 显示暂存区和工作区的差异:git diff
- 显示工作区与当前分支最新commit之间的差异:git diff HEAD
- 显示暂存区和上一个commit的差异:git diff –cached [file]
- 显示今天你写了多少行代码:git diff –shortstat “@{0 day ago}”
8.5. git blame
- 显示指定文件是什么人在什么时间修改过:git blame [file]
9. 撤销/反转
9.1. git reset
- 重置暂存区的指定文件:git reset [file]
- 重置暂存区与工作区:git reset –hard
- 重置暂存区到指定commit:git reset [commit]
- 重置暂存区和工作区到指定commit:git reset –hard [commit]
- 重置当前HEAD为指定commit,但保持暂存区和工作区不变:git reset –keep [commit]
9.2. git revert
反转撤销提交,只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了。
- 反转撤销提交:git revert [commit]
- 撤销最近的一个提交:git revert HEAD
10. 其他
- 生成一个可供发布的压缩包:git archive