如果命令行可以解决的问题,就绝对不要用GUI工具。快点试用Git bash吧, 别再用TortoiseGit了。

1. 必会8个命令

下面的操作都是经常使用的,有些只需要做一次,有些是经常操作的

git命令虽然多,但是经常使用的不超过8个。

命令执行次数说明
git clone http://sdfjslf.git每个项目只需要执行一次//克隆一个项目
git fetch origin round-2每个分支只需要执行一次//round-2分支在本地不存在,首先要创建一个分支
git checkout round-2多次// 切换到round-2分支
git branch --set-upstream-to=origin/round-2每个分支只需要执行一次// 将本地round-2分支关联远程round-2分支
git add -A每次增加文件都要执行// 在round-2下创建了一个文件, 使用-A可以添加所有文件到暂存区
git commit -am "我增加了一个文件"每次提交都要执行// commit
git push每次推送都要执行//最好是在push之前,使用git pull拉去远程代码到本地,否则有可能被拒绝
git pull每次拉去都要执行拉去远程分支代码到本地并合并到当前分支

2. 常用的git命令

假设你在master分支上

// 将本地修改后的文件推送到本地仓库
git commit -am '修改了一个问题'

// 将本地仓库推送到远程仓库
git push

2.1. 状态管理

2.1.1. 状态查看

查看当前仓库状态

git status

2.2. 分支管理

2.2.1. 分支新建

基于当前分支,创建test分支

// 创建dev分支
git checkout dev

// 创建dev分支后,切换到dev分支
git checkout -b dev 

// 以某个commitId为起点创建分支
git checkout -b new-branch-name commit-id

2.2.2. 分支查看

查看远程分支: git branch -r

// 查看本地分支
git branch

// 查看远程分支
git branch -r

// 查看所有分支
git branch -a

2.2.3. 分支切换

切换到某个分支: git checkout 0.10.7

> git checkout 0.10.7
Branch 0.10.7 set up to track remote branch 0.10.7 from origin.
Switched to a new branch '0.10.7'

2.2.4. 分支合并

将master分支合并到0.10.7分支: git merge

> git merge master
Merge made by the 'recursive' strategy.
 public/javascripts/app-qc.js      |  83 +++++++++++++++++++++++++--
 views/menu.html                   |   1 +
 views/qc-template-show-modal.html | 114 ++++++++++++++++++++++++++++++++++++++
 views/qc-template.html            |   7 ++-
 4 files changed, 198 insertions(+), 7 deletions(-)
 create mode 100644 views/qc-template-show-modal.html


// 有时候只想合并某次commit到当前分支,而不是合并整个分支,可以使用 cherry-pick 合并
git cherry-pick commmitId

2.2.5. 分支删除

// 删除远程dev分支
git push --delete origin dev

// 删除本地dev分支
git branch -D dev

2.2.6. 拉取本地不存在的远程分支

// 假设现在在master分支, 我需要拉去远程的dev分支到本地,而本地没有dev分支

// 拉取远程分支到本地 git fetch orgin 远程分支名:本地分支名
git fetch origin dev:dev

// 切换到dev分支
git checkout dev

// 本地dev分支关联远程dev分支, 如果不把本地dev分支关联远程dev分支,则执行git pull和git push命令时会报错
git branch --set-upstream-to=origin/dev

// 然后你就可以在dev分支上编辑了

2.3. 版本对比

// 查看尚未暂存的文件更新了哪些部分
git diff

// 查看某两个版本之间的差异
git diff commitID1 commitID2 

// 查看某两个版本的某个文件之间的差异
git diff commitID1:filename1 commitID2:filename2

2.4. 日志查看

git log 
git short-log

2.5. 撤销修改

2.5.1. 撤销处于修改状态的文件

如果你修改了某个文件,但是还没有commit到本地仓库。

git checkout -- somefile.js

2.5 丢弃所有未提交的改变

git clean 用来删除未跟踪的新创建的文件或者文件夹

git checkout . && git clean -xdf

git clean

  • -x 不读取gitignore中的忽略规则
  • -d 删除所有未跟踪的文件和文件夹
  • -f 强制

3. oh-my-zsh中常用的git缩写

alias ga='git add'
alias gb='git branch'
alias gba='git branch -a'
alias gbd='git branch -d'
alias gcam='git commit -a -m'
alias gcb='git checkout -b'
alias gco='git checkout'
alias gcm='git checkout master'
alias gcp='git cherry-pick'
alias gd='git diff'
alias gfo='git fetch origin'
alias ggpush='git push origin $(git_current_branch)'
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
alias glgp='git log --stat -p'
alias gm='git merge'
alias gp='git push'
alias gst='git status'
alias gsta='git stash save'
alias gstp='git stash pop'
alias gl='git pull'
alias glg='git log --stat'
alias glgp='git log --stat -p'
alias glgga='git log --graph --decorate --all' // 图形化查看分支之间的发展关系

oh-my-zsh git命令缩写完整版

4. 参考文献