Git基本命令

Posted by Surflyan on 2017-10-10

git 的“三”

三种状态

  • 已提交(committed):表示该文件已经被安全地保存在本地数据库中了;
  • 已修改(modified):表示修改了某个文件,但还没有提交保存;
  • 已暂存(staged):表示把已修改的文件放在下次提交时要保存的清单中。

三个工作区域:

  • 工作目录(只有一个)
  • 暂存区域
  • 版本库

git 撤销操作

# 撤回暂存区文件
git reset HEAD <file>

# 重置当前分支HEAD为指定提交,暂存区回退到指定提交,工作区不变
git reset  [commit-id]

# 重置HEAD为指定提交,保持暂存区和工作区不变
git reset --keep [commit-id]

# 重置当前分支HEAD为指定提交,暂存区和工作区回退到指定提交
git reset --hard [commit-id]

# 修改上次提交内容(add to stage)/修改上次提交说明
git commint --amend

# 恢复暂存区到工作区(危险!会丢失工作区修改,推荐使用stash)
git checkout .
git checkout <file>

# 恢复指定提交到暂存区和工作区(危险!会丢失未提交暂存区和工作区)
git checkout HEAD .
git checkout HEAD <file>

# 保存工作目录
git stash
git stash list
# 恢复现场,弹出并删除
git stash pop
# 恢复现场,弹出不删除
git stash apply
# 删除 stash
git stash drop

git 差异比较

# 暂存区和工作区差异(暂存区无提交,与HEAD比较)
git diff

# 暂存区和上次提交差异
git diff --cached

# 暂存区以及工作区和HEAD指向提交差异
git diff  HEAD

# 任意两次提交差异
git diff [commit-id]  [commit-id2]

# 变化清单
git diff --stat

git 分支指令

# 创建分支
git branch [branch-name]

# 切换分支(提交/stash 之后)
git checkout [branch-name]

# 创建并切换分支
git checkout -b [branch-name]

# 切换到上一个分支
git checkout -

# 列出本地分支
git branch

# 列出所有本地及远程分支
git branch -a

# 删除分支
git branch -d [branch-name]

# 强制删除分支(该分支没有合并)
git branch -D [branch-name]

# 合并分支到当前分支,若出现冲突,解决冲突,再 add 到暂存区, commit,后删除分支
git merge [branch-name]

# 线性合并分支
git rebase

git 远程操作

# 使用 origin 代替一切远程仓库名

# 从远程仓库克隆
git clone [url] [rename]

# 添加远程仓库
git remote add [shortname/origin] [url]

# 移除远程仓库
git remote rm origin

# 远程仓库重命名
git remote rename [init-name] [new-name]

# 当前配置的所有远程仓库,
git remote

# 已配置的远程仓库及其读写操作权限和URL地址
git remote -v

# 远程仓库的详细信息、
git remote show origin

# 抓取数据到本地
git fetch origin
git fetch origin [branch-name]

# 新建分支 track 远程分支(clone 默认只看到master分支)
git checkout -b [new-branch] origin/[branch-name]
# 或者合并直接合并远程分支
git merge origin/[branch-name]

# 抓取并合并
git pull origin master : master

# 推送本地分支到远程分支
# 完整写法
git push origin [local-branch-name]: [remote-branch-name]
# 本地分支推送与之存在追踪关系的远程分支(通常为同名分支),若不存在,则会创建新分支
git push origin [branch-name]
# 当前分支与远程存在追踪关系(simple 模式)
git push origin
# -u 指定默认主机 (以后直接使用git push推送当前分支到存在追踪关系的远程分支)
git push -u origin master
# 推送所有本地分支(不管有无对应关系)
git push origin --all
# 如果本地版本落后远程版本,强制推送(危险! 远程版本会被覆盖)
git push  origin --force

# 手动建立本地分支与远程分支链接关系
git branch --set-upstream branch-name origin/branch-name

# 删除远程分支
git push origin --delete [branch-name]
git push origin :[branch-name]

git 文件操作

# 删除已提交文件,将删除操作放入暂存区
git rm <file>

# 取消对文件的追踪,文件还保留在工作区
git rm -- cached <file>

# 强制删除文件(工作区)
git rm -f <file>

# 忽略文件,建立.gitignore ,写入正则匹配
vim .gitignore

# 添加例外文件(忽略文件)
!exception.pyc

# 文件重命名
git mv <file-name-from> <file-name-to>

git 查看操作

# 提交历史查看
git log
# 图形分支显示
git log --graph
# 提交历史,以及每次变更的文件
git log --stat
# 显示一定数目的提交
git log -2
# 指定作者、提交者
git log --author= "name"
git log --commiter="commiter"
# 根据关键词,搜索提交历史
git log -S [keyword]
# 显示格式(format自定义)
git log --pretty = [oneline short full format:"%Cred%h%Creset %s %Cred%cn%Creset %Cblue%cd%Creset" ]
# 反向显示
git log --reverse
# 当前各个分支所指提交对象
git log --decorate
# 某个文件的版本历史
git log --follow <file>

#查看所有操作记录
git reflog

# 查看历史提交库中某一文件内容
git show commit-id:./filename

# 查看指定提交的数据和变化的内容
git show [commid-id]

# 按行查看某一文件提交历史
git blame <file>

# 缓冲区文件列表
git ls-files

git 配置

# 当前仓库配置
git config --local -l
# 当前用户配置
git config --global -l
# 当前系统配置
git config --system -l
# 当前生效配置
git config -l
# 编辑 git 配置文件
git config -e [--global]
# 配置信息修改
git config [--global] alias.st status

# 获取帮助
git help <command>
git <command> -h

请多多指教!