# 常用操作

# 状态管理

  1. git status
    • Changes not staged for commit
      • 表示得大概就是工作区有该内容,但是缓存区没有,需要我们git add
    • Changes to be committed
      • 一般而言,这个时候,文件放在缓存区了,我们需要git commit
    • nothing to commit, working tree clean
      • 这个时候,我们将本地的代码推送到远端即可
    • git reflog, 查看历史操作记录,包括已删除的commit
    • git log, 查看日志
    • git log --oneline ,不包含已删除的commit

# 配置管理

  1. git config --list
    • 列出当前配置
  2. git config --local --list
    • 列出Repository配置
  3. git config --global --list
    • 列出全局配置
  4. git config --system --list
    • 列出系统配置
  5. 配置用户名
    • git config --global user.name "your name"
  6. 配置用户邮箱
    • git config --global user.email "youremail@github.com"

# 分支管理

  1. git branch --merged

    • 查看哪些分支已经合并到当前分支
  2. git branch --no-merged

    • 查看哪些分支没有合并到当前分支
  3. git branch -v

    • 查看各个分支最后一个提交对象的信息
  4. git push origin -d <\branch-name>

    • 删除远程分支
  5. git branch -m <\oldbranch-name> <\newbranch-name>

    • 重命名分支
  6. git checkout -b dev origin/master

    • 拉取远程分支master并创建本地分支dev
  7. git fetch origin <\branch-name>:<\local-branch-name>

    • 一般而言,这个origin是远程主机名,一般默认就是origin。
    • branch-name 你要拉取的分支
    • local-branch-name 通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。

    示例

    git fetch origin master:develop
    从远处master分支拉取,并在本地新建 develop分支。同时切换到develop
    
    1
    2
  8. git fetch origin

    • 将某个远程主机的所有更新,全部取回本地。
  9. git fetch origin master

    • 取回master分支的更新
  10. 查看远程分支和本地分支的对应关系

    1. git remote show origin
  11. 远程删除分支,本地也想删除

    1. git remote prune origin
  12. 查看远程的分支并列车信息

--format='%(align:50,left)%(color:reset)%(refname:strip=3)%(end)%(align:30,left)%(color:yellow)%(authorname)%(end)%(align:50,left)%(color:cyan)%(authordate:format:%Y/%m/%d/ %I:%M %p)%(end)'
refs/remotes20. 查看并列出远程未合并的分支,并按名字排序 1.git br -r --sort=authorname --format='%(align:50,left)%(color:reset)%(refname:strip=3)%(end)%(align:30,left)%(color:yellow)%(authorname)%(end)%(align:50,left)%(color:cyan)%(authordate:format:%Y/%m/%d)%(end)' --no-merged |pbcopy``` 2. find /sbin -perm +700 |xargs ls -l

  1. 多分分支删除
    1. cat 1.txt|xargs git push origin --delete

# 撤销操作

  1. git checkout .

    • 撤销工作区修改
  2. git reset HEAD

    • 暂存区文件撤销 (不覆盖工作区)
  3. git reset --(soft | mixed | hard ) < HEAD ~(num) > |

    • 版本回退
    • --hard: 回退全部,包括HEAD,index,working tree
    • --mixed: 回退部分,包括HEAD,index
    • --soft: 只回退HEAD
  4. git restore --staged <文件> 以取消暂存

# 文档暂存

暂存是倒序,最新的在最开始。最近保存的stash 是 stash{0}

  1. git stash save -a “message”
    • 添加改动到stash
  2. git stash drop stash@{ID}
    • 删除暂存
  3. git stash list
    • 查看stash列表
  4. git stash clear
    • 删除全部缓存
  5. git stash pop stash@{ID}
    • 恢复改动

# 差异比较

  1. git diff
    • 比较工作区与缓存区
  2. git diff -- cached -比较缓存区与本地库最近一次commit内容
  3. git diff HEAD -比较工作区与本地最近一次commit内容
  4. git diff 《commit id》《commit id》 -比较两个commit之间差异

# 分支名 (opens new window)

  1. master 分支
    • 主分支,用于部署生产环境的分支,确保稳定性。由release分支合入
  2. develop 分支 -develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。
  3. feature分支
    • 由develop分支开出,feature/新功能 命名
  4. release分支
    • release 为预上线分支,发布提测阶段,会release分支代码为基准提测
  5. hotfix分支e
    • 分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。
    • 线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。

# tag

  1. git tag -a v1.0.0 -m 测试包
    • 新增版本号为v1.0.0,信息为测试包 的tag
  2. git tag -l 或者git tag
    • 列出当前的tag
  3. git tag -d v1.0.0
    • 删除v1.0.0这个tag
  4. git push origin v1.0.0
    • 将v1.0.0这个tag推送到远程仓库
  5. git push origin --tags
    • 将所有的tag推送到远程仓库
  6. git push origin :refs/tags/v1.0.2 或者 git push origin --delete v1.0.2
    • 删除远程仓库的 v1.0.2 这个tag
  7. git show-ref --tag 查看远程分支
  8. git tag -l |awk '/v/' | xargs git tag -d 删除所有tag

# git 帮助

  1. git help (--help)
    • 展示Git命令大纲
  2. git help -a
    • 展示Git命令大纲全部列表
  3. git help
    • 展示具体命令说明手册

# 补充

  1. git stash save 'xxxx'
    • 保存未提交的修改,同时自定义 stash 栈中的信息名称:
  2. git stash list
- 查看现有 stash
  1. git stash apply 等价于 git stash apply stash@{0}

    • 恢复最近的一个缓存。释放之后,刚才的记录还存在 list 中
  2. git stash pop

    • 恢复最近的一个缓存。释放之后,刚才的记录不存在 list 中
  3. git config

    1. git config --get-regexp "branch.*.description" | gsed "s/description//" | awk -F. '{print $2,$3}'