常用的Git命令

基础知识

  • HEAD: 默认是本地已commit的最新commit_id
  • origion/master: 默认是远程已push的最新commit_id

分支

本地分支:

新建:

  • 远程不存在: git branch ${branch_name}
  • 远程存在: git checkout -b ${branch_name} origin/${branch_name}

切换:

  • git checkout ${branch_name}

查看:

  • 列出本地所有分支: git branch
  • 列出当前分支: git branch 会在当前分支前加星号.

修改:

删除:(需要切换到其他分支, 不能在当前分支下删除当前分支)

  • 未跟踪远程分支: git branch -d ${branch_name}
  • 已跟踪远程分支:
  1. git branch -d ${branch_name} //删除本地分支
  2. git push origin –delete ${branch_name} //删除远程分支

远程分支:

推送:

  • 远程分支不存在(则新建): git push origin ${branch_name}
  • 远程分支存在: git push

新建:

查看:

  • 远程仓库具体地址: git remote -v
  • 远程分支列表: git branch -a; git branch -r

删除

  • 仅删除远程分支:
  1. git branch -d -r origin/${branch_name}
  2. git push origin :${branch_name}
  • 删除本地+远程:
  1. git branch -d ${branch_name} //删除本地分支
  2. git push origin –delete ${branch_name} //删除远程分支

本地&远程关联关系:

查看:

git branch -vv

添加绑定:

  • 远程分支已存在:
git branch --set-upstream ${branch_name} origin/${branch_name}
  • 远程分支未存在:
git push -u origin ${branch_name}

删除:

  • 仅删除绑定关系, 本地与远程分支都不删除: git branch –unset-upstream
  • 仅删除远程分支: git branch -d -r origin/${remote_branch}

commit

查看

  • 当前分支: git log
  • 指定分支: git log ${branch_name}

变更

未stage的变更:

  • 添加至stage: git add
  • 添加至stash: git stash save “comments”
  • 查看diff具体内容: git diff
  • 丢弃(覆盖本地变更): git checkout .
  • 删除本地(未加入.gitigonre的文件): git clean -f
  • 删除本地目录: git clean -fd
  • 删除本地(已经加入.gitigonre的文件): git clean -fX

已stage, 未commit的变更:

  • 添加至本地repo: git commit -m “comments”
  • 查看diff具体内容: git diff HEAD
  • 丢弃
    • 变更内容退回至unstage: git reset HEAD .
    • 变更内容退回至彻底丢弃: git reset –hard HEAD .

已commit, 未push的变更:

  • push: git push
  • 查看diff具体内容:
    • git log // 拿到commit_id
    • git diff origin/master commit_id
  • 丢弃:
    • 变更内容退回至unstage: git reset commit_id
    • 变更内容退回至彻底丢弃: git reset –hard commit_id

已push的变更:

  • 查看diff具体内容: git diff commit_a commit_b 或者 git show commit_no
  • 丢弃:

stash的详细变更信息

  • 查看stash列表: git stash list
  • 将stash的内容进行unstage: git pop stash_id
  • 查看stash具体内容(而不pop出来): git stash show -p stash_id

将stash内容删除

git stash drop stash_id

问题排查&修复

SSL

LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
git config --global --unset http.proxy

常用技巧

  • 压缩commit
  • resolve conflicts
  • cherry-pick