配置
# 全局配置
git config
# 项目配置
git config --global
常用的用户信息配置
# 用法
git config user.name "twesix"
git config --global user.name " twesix"
git config --global user.email "a@b.com"
git config --global color.ui auto
常用的别名配置
# 用法
git config alias.short_command long_command
git config --global alias.st status \
git config --global alias.co checkout \
git config --global alias.ci 'commit -m' \
git config --global alias.br branch
git rm
的用法
# 删除工作区的文件并在缓存区标记这次删除
# 之后提交的话这次删除就会被commit所记录
git rm foo
# 从缓存区删除, 但在工作区中保留
# 这个操作会让git停止跟踪这个文件的变化
# 但是用git add *添加所有文件之后, git会再次开始跟踪这个文件的变化
# 所以, 如果想要彻底不跟踪某个文件, 一定要在.gitignore中标记
git rm --cached foo
git reset
的用法
# 所有需要commit_id的地方都可以用branch_name, HEAD, tag_name来代替
# 不一定非要写完整的commit_id
# commit_id可以省略不写, 默认为HEAD
# 仅仅移动HEAD所指向的branch_name的指向
# 就是HEAD依旧指向该branch_name
# 但是branch_name指向变成了commit_id
# 不会修改暂存区和工作目录
git reset --soft commit_id
# 移动HEAD所指向的branch_name的指向
# 并修改暂存区, 使得暂存区和commit_id指向的commit一致
git reset commit_id
# 移动HEAD所指向的branch_name的指向
# 并修改暂存区, 使得暂存区和commit_id指向的commit一致
# 然后修改工作目录, 用commit_id指向的commit中的内容覆盖工作目录
# 这个命令极其危险, 可能会造成工作目录中未提交的修改丢失
# 你最好知道你在做什么
git reset --hard commit_id
# 什么都不做
git reset --soft commit_id file_path
# 用commit_id中file_path的内容更新暂存区中file_path的内容
# 命令中的`--`表示后面的是文件路径, 不要当成参数去解析
git reset commit_id -- file_path
# 用commit_id中file_path的内容更新暂存区中file_path的内容
# 同时也用commit_id中file_path文件的内容覆盖掉工作目录中file_path文件的内容
# 命令中的`--`表示后面的是文件路径, 不要当成参数去解析
# 这个命令极其危险, 可能会造成工作目录中未提交的修改丢失
# 你最好知道你在做什么
git reset --hard commit_id -- file_path
git stash
的用法
# 将发生变化的文件压栈暂存, 注意, 不是放入准备提交的那个缓存区
git stash
# 用堆栈最顶端的版本覆盖当前工作区
git stash pop
# 列出堆栈中的所有版本
git stash list
# 清空堆栈
git stash drop
git branch
的用法
# 列出所有的分支
git branch
# 创建名为foo的新分支
git branch foo
# 删除名为foo的分支
git branch -d foo
git checkout
的用法
# 所有需要commit_id的地方都可以用branch_name, HEAD, tag_name来代替
# 不一定非要写完整的commit_id
# commit_id可以省略不写, 默认为HEAD
# 移动HEAD指向branch_name分支
# 然后根据branch_name分支指向的commit更新暂存区和工作目录
# 如果工作目录有未提交的修改, 为了避免这些修改被覆盖而丢失
# 这个命令会尝试合并当前工作目录和commit
# 如果无法合并
# 这个命令会报错, 警告你相关的情况
git checkout branch_name
# 不移动HEAD
# 根据HEAD所指向的commit中foo的内容来替换暂存区中的foo的内容
# 再使用HEAD所指向的commit中foo的内容来替换工作目录中的foo的内容
# 注意, 这个命令会试图将commit中foo的内容与工作目录中foo的内容进行合并
# 如果无法合并, 会给出相关的警告
get checkout HEAD(or commit_id or branch_name) foo
# 创建并切换到foo分支, 新的分支指向HEAD所指向的commit
# 当HEAD不指向任何分支时, 即detached状态时, 这个命令很有用
git checkout -b foo
git commit
的用法
# 提交缓存区的改动
git commit -m 'commit message'
git fetch
的用法
# 从origin_name拉取所有的远程分支, 但是不与本地的分支合并也不修改工作区
# branch_name 可以不写, 默认所有分支
# origin_name 也可以不写, 默认origin
git fetch remote_name branch_name
git merge
的用法
# 将foo分支合并到当前分支
git merge foo
git pull
的用法
# 等同于git fetch + git merge
git pull
git push
的用法
# 将本地的分支推送到远程服务器
git push remote_name local_branch:remote_branch
git diff
的用法
# 列出当前没有添加到缓存区的文件的变化情况
git diff
# 列出缓存区文件与上次提交文件的变化情况
git diff --staged
# 列出某个文件每次提交的变化情况
git diff--follow foo
# 列出两个分支的不同之处
git diff foo bar
git log
的用法
# 列出当前分支的提交链
git log
网友评论