20 条实用的 git 命令

我的总结出的一些实用的 git 命令,分享给你们。git

  1. git config --global color.ui true

git 命令默认使用彩色输出。 这条命令在 git 2 以后已经成为默认配置,但若是你还在用比较老的版本(例如 CentOS 上的默认的 git 版本),建议把这项配置加上去。shell

  1. git branch -av

显示全部本地即远程分支,并显示最后提交的 Commit 信息。若是不加参数,则只会显示全部本地分支的名字。app

  1. git checkout -b <NAME> [<START POINT>]

建立,并切换到新分支。git branch <NAME> 只会建立分支而不会切换到新分支,能够用它备份当前分支。工具

  1. git tag -L <PATTERN>

列出全部符合条件的标签。若是你的项目严格按照 Major.Minor.Update 做为版本名称,那么这条命令就很是有用。它能够直接列出来当前版本下有那些小的 bugfix 版本。固然若是你非要 grep 一下我也没意见。ui

  1. git diff -w

显示未提交的更改,忽略空格。人们每每注重实际代码的改变而不注重缩进的变化。若是某个文件有大量缩进改变,-w 这个参数就很是有用。code

  1. git commit --amend

修补前一次提交。至关于撤销前一次提交,作更改后从新提交。这也是一条很是实用的命令。当你发现前一次提交有一些小问题的时候(好比说漏提交了新建立的文件,或者有一些小的拼写错误),能够用这条命令修正前一次提交。它对 merge 提交友好,并且能够用于修正前一次提交的 message 信息。须要注意的是:若是你已经推送了前一次提交,amend 以后须要强推,这一点须要注意。开发

  1. git log --graph --oneline --no-merge

显示当前仓库的提交历史。git log 你们都用过,但真正研究过 git log 后面参数的人可能就很少。git log 后面能够接不少实用的参数,示例中的让提交历史以单行模式显示、显示提交历史树并删除 merge 提交。rem

  1. git log -p --follow --stat -- <PATH>

显示某个文件的提交历史。在 git 中,-- 后接文件路径就表明对单个文件的操做。-p 能够显示具体修改的行,--follow 能够跟踪文件的移动和重命名,--stat 用于显示添加、删除行的数量。文档

  1. git config --global alias.xx "<COMMAND>"

给某 git 命令建立别名。对于一些比较长的命令,能够建立别名。之后只须要 git xx 便可执行 COMMAND 这条命令字符串

  1. git pull --rebase, --rebase 能够简写为 -r

使用 git rebase 代替 git merge 执行 pull 操做。git pull --rebase 能够构造出很是整齐的提交历史树,强迫症的福利。git 的官方文档一再提醒这是个危险操做,由于它会修改你的代码提交历史。git rebase 的本质是撤销指定的提交,而后以指定的方式从新提交他们。git pull -r 就至关于首先撤销没有推送到远端的 commit,将远程代码覆盖到本地以后,从新提交全部以前撤销的 commit。与 git merge 不一样,当有冲突产生时,git rebase 不会为你的 merge 操做生成一个新的提交。因此一旦 git pull --rebase 执行完毕就没法撤销。

  1. git config --global pull.rebase true

默认使用 git rebase 代替 git merge 执行 pull 操做。git 提供了一系列配置 git pull --rebase 操做:branch.<BRANCH NAME>.rebasebranch.autosetuprebase。这条是最简单的全局配置项。尽管配置了默认使用 rebase,你可使用 --merge 开关强制使用 git merge 执行 git pull

  1. git rebase -i

交互式变基操做。git 中最强大的修改提交历史的操做,固然也是最危险的操做。它可让你修改 commit 说明、让几个 commit 合并、交换 commit、删除 commit,甚至在提交某 commit 前执行一段 shell 命令。很是有用、很是强大、同时也是极其危险的操做。强烈建议在执行 git rebase -i 以前先使用 git branch 备份当前分支。

  1. git push <remote> [<commit>]:<branch>

推送指定的 commit 到远程。有时候你某个工做作到一半,而后来了一个bug要修。固然最好的作法是基于最新的远端分支新开一个分支,基于这个分支开发。可是若是你忘了新开分支,直接把代码提交到了当前分支怎么办?在你须要 push 的分支以前又有别的不须要的 commit。这时就能够先用 git rebase 交换 commit 的顺序,而后推送单个提交。若是你写了冒号可是不写 commit 号,就会变成删除某个远端分支。这是彻底不一样的并且可能有危险操做,须要注意。

  1. git blame <PATH> [-L <M,N>]

逐行检查某文件的提交人、提交时间和 commit 号。blame 的中文意思是追责,你们顾名思义,撕逼甩锅时用。 -L 能够指定要检查的行号。

  1. git stash [push] [-u]

贮存当前工做区的更改。常常有这样的事情发生,当你正在进行项目中某一部分的工做,里面的东西处于一个比较杂乱的状态,而你想转到其余分支上进行一些工做。问题是你还不想提交这些代码,这是就能够用 git stash 命令将未提交的更改临时保存到一个贮存项中。-u 表示将未加入版本管理的文件也保存(好比新建的一些文件)

  1. git stash apply <INDEX>git stash pop <INDEX>

将最后一次保存的(或指定的某个)贮存项应用至当前工做区。与前面的 git stash [push] 配套使用。 applypop 的区别是:pop 会在应用更改的同时把所应用的贮存项删除,而 apply 不会。

  1. git cherry-pick -x <COMMIT>..

摘取 某些提交。即把另外一个本地分支的 commit 应用到当前分支。若是咱们同时维护多个分支,这个操做就颇有用。好比说你在主干 master 分支上修复了一个 bug,而后你想把这个修复应用到一个旧版本的分支上,可是你又不想把其余 master 分支的新功能拉进来,这时就能够用 cherry-pick-x:在提交记录中添加一行 (cherry picked from commit <commit>),让两个提交关联起来。

  1. git revert <COMMIT>

回滚某个提交。即提交某个 COMMIT 的反提交。最快修复某个 bug 的方式就是把引入 bug 的代码干掉。注意干掉代码不表明就要用 git rebase -i 把提交自己也干掉。

  1. git grep <PATTERN>

在当前加入版本管理的文件中全文检索某字符串。相似于 grep 操做,可是会忽略不须要的(加入 .gitignore 的)文件,很是实用的命令。

  1. git bisect

实用二分查找的方式定位引入问题的提交。快速定位 bug 的方式。在找不到 bug 出现的缘由时,不妨用 git bisect 将 bug 先锁定到某个 commit 上。

  1. git clean -fd

删除未追踪的文件。-d 表示连目录也一块儿删除。-x 表示删除被忽略掉的文件,能够用此命令删除编译生成的文件。能够用 -n 查看有哪些文件将被删除。

  1. git reflog

显示 git 的操做记录。当你使用 git reset --hard 误删某个 commit 时能够用此法抢救回来。

  • brew install tig

美化 git 输出,重度终端用户的福利。这个实际上是工具安利了,它用图形化的方式(ncurses)美化 git 输出,谁用谁知道 :)

相关文章
相关标签/搜索