git 常用命令总结

2018/05/06 Git

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

    1. fork 原始仓库
    2. clone 自己的仓库
    3. 在 master 分支添加原始仓库为远程分支 git remote add upstream 远程仓库
    4. 自己分支开发,如 dev 分支开发:git checkout -b dev
    5. 本地 dev 提交
    6. 切换 master 分支:git checkout master,同步原始仓库:git pull upstream master
    7. 切换本地 dev 分支,合并本地 master 分支(已经和原始仓库同步),可能需要解冲突
    8. 提交本地 dev 分支到自己的远程 dev 仓库
    9. 现在才是给原始仓库发 pull request 请求
    10. 等待原作者回复(接受/拒绝)

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

搜索

    欢迎关注我的微信公众号

    文到

    目录