引言
本文介绍常用的指令行东西以及常用的 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
。
其间一行是咱们的插件装备,运用的 oh my zsh
插件都有必要增加进去,如下:
git 插件
默许翻开,无需装备,git 插件是后面的重要主题。
Z 插件
Z 目录跳转插件。注意装置插件后,只有再次访问过的目录才会被 Z 辨认。增加到 oh my zsh
的装备文件 ~/.zshrc
中,见插件装备。
如图,咱们第一次运用 z mytest
没有进入 mytest
目录,当咱们运用 cd mytest
今后再次尝试成功进入 mytest
。事实上咱们运用 z my
和 z 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-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 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 pull
之后的 commit:
能够看到咱们多了一个兼并代码的提交。在同一个分支,这个兼并提交不是咱们需求的。为此咱们能够用下面的指令设置,主张设置为大局:
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 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
一句话解说就是,将某些提交变基。看一个官方的比方。
topic 是基于 master 切出来的分支,现已有了 ABC 三个新的提交。现在 topic 分支想要更新 master 分支的代码,能够在 topic 上运用下面的指令。
# 别号
grb='git rebase'
grbm='git rebase $(git_main_branch)'
# 实例
grb master
grbm
下面履行完成功之后的姿态。
git rebase 有抵触的状况
topic 分支有多个抢先 master 分支的提交,git rebase
是一个一个分别处理。比方上文所示,先处理 A 提交,没有抵触或许抵触处理完成今后再处理 B 提交,以此类推。下面介绍有抵触的状况。
有一个名称为 rebase_main 的分支,最新提交如下:
别的有一个名称为 rebase_feat 的分支,最新提交如下:
接下来在 rebase_feat 分支履行 grb rebase_main
,成果如下。
根据 Git 提示,咱们知道以下几点:
- rebase 操作导致了文件内容抵触,文件名称为 README.md。
- 咱们有必要手动处理抵触,而且标记抵触现已处理。
- 处理抵触后,咱们要运用
git add
表明现已处理了抵触,然后运用git rebase --continue
指令告诉 Git 持续履行 rebase 操作。 - 运用
git rebase --skip
指令丢掉当时抵触的提交,即 rebase_feat 分支的最新提交。 - 运用
git rebase --abort
指令放弃本次 rebase 操作,回到之前的状况。
下面咱们开端处理抵触:
第一步:检查抵触的文件,删去或许兼并代码。
兼并之前
怎么兼并代码依照你的需求决议,能够选择只留下 rebase_main 分支的内容,或许只留下 rebase_feat 分支的内容,或许二者皆留下,或许二者皆丢掉,或许手动修正增加。
兼并今后
第二步:履行 git add
,如下图。
第三步:履行 git rebase --continue
,履行此操作会让你修正提交信息。履行成功后如下图。
假如 rebase_feat 分支多个新的提交,每个提交都有抵触,需求依照上述方法一个一个的处理。
git rebase -i
对从某个提交开端到最新的提交进行修正、兼并、改动次序、删去等操作。有两种形式。
第一种:grbi 57cebe6
,不包括 57cebe6
提交。
第二种:grbi HEAD~3
,表示对最新的三个提交进行操作,这是比较常用的形式,下面侧重对其进行介绍。
首要检查一下现在的提交。
然后履行 grbi HEAD~3
对最新的三个提交进行操作。
对照列出指令顺次阐明
- pick,默许需求此提交,无变化。
- reword,需求此提交,可是修正提交信息。
- edit,需求此提交,能修正提交信息和提交内容,与 reword 差异见 git rebase – what’s the difference between ‘edit’ and ‘reword’ – Stack Overflow
- sqush,将当时提交兼并到前一个提交,需求修正提交消息。
- fixup,和 sqush 相似,可是不需求修正提交信息。
- drop,删去此提交
- 改动提交在文件中的方位,也即改动了提交在 git 中的方位。比方把提交
150dc60
和57cebe6
在文件中的次序就能改动它们在 git 中的次序。
以上是常用的指令,其他指令能够对照官网进行学习,下面以 sqush
为例,演示运用流程。
第一步:修正 pick -> s
,然后保存。
第二步:进入信息重新修正页面,修正信息,然后保存。假如过程中发生抵触,依照 rebase 有抵触的状况进行处理。
下面是最新两个提交的成果
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
修正文件的操作。