个人总结出的一些实用的 git 命令,分享给大家。
一. git config –global color.ui true
让 git 命令默认使用彩色输出。 这条命令在 git 2 之后已经成为默认配置,但如果你还在用比较老的版本(例如 CentOS 上的默认的 git 版本),建议把这项配置加上去。
二. git branch -av
显示所有本地即远程分支,并显示最后提交的 Commit 信息。如果不加参数,则只会显示所有本地分支的名字。
三. git checkout -b []
创建,并切换到新分支。git branch 只会创建分支而不会切换到新分支,可以用它备份当前分支。
四. git tag -L
列出所有符合条件的标签。如果你的项目严格按照 Major.Minor.Update 作为版本名称,那么这条命令就非常有用。它可以直接列出来当前版本下有那些小的 bugfix 版本。当然如果你非要 grep 一下我也没意见。
五. git diff -w
显示未提交的更改,忽略空格。人们往往注重实际代码的改变而不注重缩进的变化。如果某个文件有大量缩进改变,-w 这个参数就非常有用。
六. git commit –amend
修补前一次提交。相当于撤销前一次提交,做更改后重新提交。这也是一条非常实用的命令。当你发现前一次提交有一些小问题的时候(比如说漏提交了新创建的文件,或者有一些小的拼写错误),可以用这条命令修正前一次提交。它对 merge 提交友好,而且可以用于修正前一次提交的 message 信息。需要注意的是:如果你已经推送了前一次提交,amend 之后需要强推,这一点需要注意。
七. git log –graph –oneline –no-merge
显示当前仓库的提交历史。git log 大家都用过,但真正研究过 git log 后面参数的人可能就不多。git log 后面可以接很多实用的参数,示例中的让提交历史以单行模式显示、显示提交历史树并删除 merge 提交。
八. git log -p –follow –stat –
显示某个文件的提交历史。在 git 中,– 后接文件路径就代表对单个文件的操作。-p 可以显示具体修改的行,–follow 可以跟踪文件的移动和重命名,–stat 用于显示添加、删除行的数量。
九. git config –global alias.xx “”
给某 git 命令创建别名。对于一些比较长的命令,可以创建别名。以后只需要 git xx 即可执行 COMMAND 这条命令
十. 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 执行完毕就无法撤销。
十一. git config –global pull.rebase true
默认使用 git rebase 代替 git merge 执行 pull 操作。git 提供了一系列配置 git pull –rebase 操作:branch..rebase、branch.autosetuprebase。这条是最简单的全局配置项。尽管配置了默认使用 rebase,你可以使用 –merge 开关强制使用 git merge 执行 git pull。
十二. git rebase -i
交互式变基操作。git 中最强大的修改提交历史的操作,当然也是最危险的操作。它可以让你修改 commit 说明、让几个 commit 合并、交换 commit、删除 commit,甚至在提交某 commit 前执行一段 shell 命令。非常有用、非常强大、同时也是极其危险的操作。强烈建议在执行 git rebase -i 之前先使用 git branch 备份当前分支。
十三. git push []:
推送指定的 commit 到远程。有时候你某个工作做到一半,然后来了一个bug要修。当然最好的做法是基于最新的远端分支新开一个分支,基于这个分支开发。但是如果你忘了新开分支,直接把代码提交到了当前分支怎么办?在你需要 push 的分支之前又有别的不需要的 commit。这时就可以先用 git rebase 交换 commit 的顺序,然后推送单个提交。如果你写了冒号但是不写 commit 号,就会变成删除某个远端分支。这是完全不同的而且可能有危险操作,需要注意。