引言

本文介绍常用的指令行东西以及常用的 Git 指令。本文合适运用过 Git,在指令行下运用不了解的读者,其次了解 vim 简单操作会有较大帮助。阅读完本文,读者应该了解指令行下 Git 操作流程,能处理常见的 Git 问题,经过操练之后能够提高自己的作业效率。

软件装置

Iterm2

iTerm2 – macOS Terminal Replacement是一个 Mac 下的终端东西。进入官网下载装置即可,下面是官网介绍。

iTerm2 is a replacement for Terminal and the successor to iTerm. It works on Macs with macOS 10.14 or newer. iTerm2 brings the terminal into the modern age with features you never knew you always wanted.

Oh My ZSH

Oh My Zsh 是一个轻量的、开源的、社区驱动办理 zsh 装备的东西。下面是官网介绍。

Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration

在指令行中履行下面的指令装置 Oh My ZSH,其他装置方法见 oh my zsh github 或许 Oh My Zsh。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Oh My ZSH 插件

装置好 Oh My ZSH 之后当时用户目录下会有一个装备文件叫做 .zshrc

命令行玩转 Git

其间一行是咱们的插件装备,运用的 oh my zsh 插件都有必要增加进去,如下:

命令行玩转 Git

git 插件

默许翻开,无需装备,git 插件是后面的重要主题。

Z 插件

Z 目录跳转插件。注意装置插件后,只有再次访问过的目录才会被 Z 辨认。增加到 oh my zsh 的装备文件 ~/.zshrc 中,见插件装备。

命令行玩转 Git

如图,咱们第一次运用 z mytest 没有进入 mytest 目录,当咱们运用 cd mytest 今后再次尝试成功进入 mytest 。事实上咱们运用 z myz test 都是能够的。

zsh-autosuggestions

zsh-autosuggestions 是一款指令行提示插件。运用下面的指令装置,而且增加到 oh my zsh 的装备文件 ~/.zshrc 中,见插件装备。

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

下图中用红色标出的灰色部分是提示部分。

命令行玩转 Git

git-open

git-open git-open 是一款快速在指令用浏览器快速翻开当时 git 项目的的插件。运用下面指令进行装置,而且增加到 oh my zsh 的装备文件 ~/.zshrc 中,见插件装备。

git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open

在库房目录履行 git-open 浏览器就能帮你翻开当时项目。

Git 指令行 gui

extrawurst/gitui 是一款指令行 ui 东西。不是本文重点,作为引荐东西,感兴趣的朋友参见官网学习。效果图如下:

命令行玩转 Git

Git

基本设置

git config

git config 指令用于设置 Git 库房的装备。大局装备文件在 ~/.gitconfig,库房的装备文件在 you-repo/.git/config。一般将自己的个人装备设置为大局的,公司的装备依照库房设置。

装备用户名和邮箱

# 库房装备
git config  user.name "your name"
git config user.email 'yourname@gmail.cn'

# 大局装备
git config --global user.name "your name"
git config --global user.email 'yourname@gmail.cn'

装备拉取代码的兼并形式

Git 默许运用 merge 形式,当时本地和长途都有修正时,这种形式会生成新的不必要的提交,如下为原来 commit:

命令行玩转 Git

履行 git pull 之后的 commit:

命令行玩转 Git

能够看到咱们多了一个兼并代码的提交。在同一个分支,这个兼并提交不是咱们需求的。为此咱们能够用下面的指令设置,主张设置为大局:

git config --global pull.rebase true

重要指令

接下来结合 oh my zsh 的 Git 插件,侧重介绍开发最常用 Git 指令。Git 插件的装备文件在 ~/.oh-my-zsh/plugins/git/git.plugin.zsh。首要是对常用 git 指令进行别号,咱们也能够经过下列指令查询相关指令的别号:

alias | grep "git commit"
命令行玩转 Git

下面首要经过别号介绍相关指令。

git status

检查当时库房的状况。这个指令非常重要,每次履行操作前后都要看一下状况,当时状况是否合适履行指令和是否履行指令成功。

gst='git status'

git commit

commit指令记载改动,首要掌握两个指令。

指令一:提交一个修正到新的提交

# 别号
gcam='git commit -a -m'

# 实例
gcam "feat: this is a commit messsage"

指令二:提交当时修正到前一个提交,而且不修正提交消息。

# 别号
gcan!='git commit -v -a --no-edit --amend'

# 实例
gcan!

git checkout

指令一:创建分支并切换

# 别号
gcb='git checkout -b'

# 实例
gcb feat/user_module_dev

指令二:切换到某个分支或许提交

# 别号
gco='git checkout'

# 实例
gco feat/user_module_dev
gco 31c98c8
gco - # 切回上一个分支
gcm #切换到主分支
gcd #切换到开发分支

git log

指令一:检查当时分支的 log

# 别号
glol='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'\'

# 实例
glol

指令二:检查当时分支的 log,而且显示每次修正的文件。

# 别号
glols='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'\'' --stat'

# 实例
glols

git diff

指令一: 检查作业区的修正

# 别号
gd='git diff'

# 实例
gd

指令二: 检查暂存区的修正

# 别号
gds='git diff --staged'

# 实例
gds

git show

检查每次提交的内容

# 别号
gsh='git show'

# 实例
gsh # 检查当时最新提交
gsh HEAD # 同上,也能够用 gsh head
gsh HEAD~1 # 检查次新提交,也能够用 gsh head^
gsh HEAD~2 # 检查次次新提交,也能够用 gsh head^^

git push

指令一:强制推送代码到长途,有抵触时则拒绝。

# 别号
gpf='git push --force-with-lease'

# 实例
gpf

指令二:将本地新分支推送到长途

# 别号
gpsup='git push --set-upstream origin $(git_current_branch)'

# 实例
gpsup

git reset

指令一:git reset –hard 此指令会丢掉修正,慎用。

# 别号
grhh='git reset --hard'

# 实例
grhh # 丢掉作业区和暂存区的改动
grhh head^ # 丢掉最新的提交
grhh head^^ # 丢掉最新的和次新的提交
grhh 31c98 # 删去比 31c98 新的提交

指令一:git reset –soft

# 别号
grh='git reset'

# 实例
grh --soft 31c98 # 将比 31c98 新的一切改动移动到暂存区,合适将许多个提交兼并成一个的场景。

git rebase

前面介绍的指令都比较简单易学,下面开端介绍 git rebase 指令,它相对复杂,可是也相对重要许多。看看Git – git-rebase Documentation解说。

git-rebase – Reapply commits on top of another base tip

一句话解说就是,将某些提交变基。看一个官方的比方。

命令行玩转 Git

topic 是基于 master 切出来的分支,现已有了 ABC 三个新的提交。现在 topic 分支想要更新 master 分支的代码,能够在 topic 上运用下面的指令。

# 别号
grb='git rebase'
grbm='git rebase $(git_main_branch)'
# 实例
grb master
grbm

下面履行完成功之后的姿态。

命令行玩转 Git

git rebase 有抵触的状况

topic 分支有多个抢先 master 分支的提交,git rebase 是一个一个分别处理。比方上文所示,先处理 A 提交,没有抵触或许抵触处理完成今后再处理 B 提交,以此类推。下面介绍有抵触的状况。

有一个名称为 rebase_main 的分支,最新提交如下:

命令行玩转 Git

别的有一个名称为 rebase_feat 的分支,最新提交如下:

命令行玩转 Git

接下来在 rebase_feat 分支履行 grb rebase_main,成果如下。

命令行玩转 Git

根据 Git 提示,咱们知道以下几点:

  • rebase 操作导致了文件内容抵触,文件名称为 README.md。
  • 咱们有必要手动处理抵触,而且标记抵触现已处理。
  • 处理抵触后,咱们要运用 git add 表明现已处理了抵触,然后运用 git rebase --continue 指令告诉 Git 持续履行 rebase 操作。
  • 运用 git rebase --skip 指令丢掉当时抵触的提交,即 rebase_feat 分支的最新提交。
  • 运用 git rebase --abort 指令放弃本次 rebase 操作,回到之前的状况。

下面咱们开端处理抵触:

第一步:检查抵触的文件,删去或许兼并代码。

兼并之前

命令行玩转 Git

怎么兼并代码依照你的需求决议,能够选择只留下 rebase_main 分支的内容,或许只留下 rebase_feat 分支的内容,或许二者皆留下,或许二者皆丢掉,或许手动修正增加。

兼并今后

命令行玩转 Git

第二步:履行 git add,如下图。

命令行玩转 Git

第三步:履行 git rebase --continue,履行此操作会让你修正提交信息。履行成功后如下图。

命令行玩转 Git

假如 rebase_feat 分支多个新的提交,每个提交都有抵触,需求依照上述方法一个一个的处理。

git rebase -i

对从某个提交开端到最新的提交进行修正、兼并、改动次序、删去等操作。有两种形式。

第一种:grbi 57cebe6,不包括 57cebe6 提交。 第二种:grbi HEAD~3,表示对最新的三个提交进行操作,这是比较常用的形式,下面侧重对其进行介绍。

首要检查一下现在的提交。

命令行玩转 Git

然后履行 grbi HEAD~3 对最新的三个提交进行操作。

命令行玩转 Git

对照列出指令顺次阐明

  • pick,默许需求此提交,无变化。
  • reword,需求此提交,可是修正提交信息。
  • edit,需求此提交,能修正提交信息和提交内容,与 reword 差异见 git rebase – what’s the difference between ‘edit’ and ‘reword’ – Stack Overflow
  • sqush,将当时提交兼并到前一个提交,需求修正提交消息。
  • fixup,和 sqush 相似,可是不需求修正提交信息。
  • drop,删去此提交
  • 改动提交在文件中的方位,也即改动了提交在 git 中的方位。比方把提交 150dc6057cebe6 在文件中的次序就能改动它们在 git 中的次序。

以上是常用的指令,其他指令能够对照官网进行学习,下面以 sqush 为例,演示运用流程。

第一步:修正 pick -> s,然后保存。

命令行玩转 Git

第二步:进入信息重新修正页面,修正信息,然后保存。假如过程中发生抵触,依照 rebase 有抵触的状况进行处理。

命令行玩转 Git

下面是最新两个提交的成果

命令行玩转 Git

git chery-pick

git chery-pick 用于将一个或许多个提交应用到现在分支。假如有抵触,和 git rebase 的处理流程一样。

首要有三个指令。

# 别号
gcp='git cherry-pick' 
gcpa='git cherry-pick --abort'
gcpc='git cherry-pick --continue'

#实例
gcp 150dc60 # 将提交 150dc60 应用于当时分支
gcpa # 放弃当时操作
gcpc # 处理抵触后,持续履行 cherry-pick 操作

总结

  • 一切别号只需求简单的记忆,忘记了就用 alias | grep 'git commit' 查询相关的功用。
  • git rebase 指令相对复杂,需求多领会,多实践。
  • 上述指令基本能够满足日常开发需求,也能够尝试 gitui 和 tig 等指令行 ui。
  • 最好了解一下 vim 修正文件的操作。