推荐一些不常用但是非常好用的Git命令

199 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

1. git log

  • --oneline 压缩模式,显示经过精简的提交哈希码和信息,一行显示
  • --graph 图形模式,查看单个分支的历史记录的话,该选项无效
  • --all 显示所有分支的历史记录
$ git log --oneline --graph
|\
| *   a1180ef Merge branch 'master' of ###########
| |\
| * | d4cb363 createDirectory -> createDirectories
* | | bee2ee4 优化条件约束
* | | 6f5a5a7 支持多条件
| |/
|/|
* | 6d0b761 修改readme
|/
* fe657c8 delete zip

2. git blame [filename]

可以将文件中的每一行的作者、最新的变更提交和提交时间展示出来。 甩锅神器

$ git blame README.md
9446b88d (niu 2022-06-03 08:51:22 +0800  1) # Launchy Translator ![python](https://img.shields.io/badge/python-2.7-ff69b4.svg) [![apm](https://img.shields.io/apm/l/vim-mode.svg?maxAge=2592000)](https://github.com/pipiliang/launchy-translator)
3ca1f9c6 (niu2 2022-05-28 22:48:31 +0800  2) ## 简介
caa53df4 (niu2 2022-05-28 22:47:13 +0800  3) Launchy工具的翻译小插件,数据接口由[有道翻译](http://fanyi.youdao.com/openapi)提供
15699347 (niu  2022-04-28 10:00:16 +0800  4)
3ca1f9c6 (niu 2022-05-28 22:48:31 +0800  5) ## 功能
caa53df4 (niu 2022-05-28 22:47:13 +0800  6) - 单词的英汉互译
b4628bed (niu 2022-06-02 23:11:59 +0800  7) - 使用[有道翻译API](http://fanyi.youdao.com/openapi),需要注册获取key

3. git rebase -i HEAD~[number_of_commits]

当你提交代码进行代码审查时或者创建一次pull request (这在开源项目中经常发生),你的代码在被接受之前会被要求做一些变更。于是你进行了变更,并且直到下一次审查之前你没有再次被要求进行变更过。在你知道又要进行变更之前,你已经有了一些额外的commit。理想情况下,你可以用rebase命令把多个commit压缩成一个


4. git cherry-pick

cherry-pick就是从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。 切换到想要应用的分支上,执行

$ git cherry-pick [commit_hash]

5. git stash

可能会遇到这样的情况,你正在一个分支上进行一个特性的开发,或者一个Bug的修正,但是这时突然有其他的事情急需处理,这时该怎么办?不可能就在这个工作进行到一半的分支上一起处理,先把修改的Copy出去?太麻烦了。这种情况下就要用到Stashing了。假如我们现在的工作目录是这样子的

$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#
modified:
index.html
#
# Changed but not updated:
#
(use "git add <file>..." to update what will be committed)
#
#
modified:
lib/simplegit.rb

此时如果想切换分支就可以执行以下命令

$ git stash
Saved working directory and index state \
"WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
(To restore them type "git stash apply")

这时你会发现你的工作目录变得很干净了,就可以随意切分支进行其他事情的处理了。 我们可能不只一次进行"git stash",通过以下命令可以查看所有stash列表

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051... Revert "added file_size"

当紧急事情处理完了,需要重新回来这里进行原来的工作时,只需把Stash区域的内容取出来应用到当前工作目录就行,命令就是

git stash apply

如果不基参数就应用最新的stash,或者可以指定stash的名字,如:stash@{1},可能通过

git stash show

显示stash的内容具体是什么,同git stash apply一样,可以选择指定stash的名字。

git stash apply之后再git stash list会发现,apply后的stash还在stash列表中,如果要将其从stash列表中删除可以用

git stash drop

丢弃这个stash,stash的命令参数都可选择指定stash名字,否则就是最新的stash。 一般情况下apply stash后应该就可以把它从stash列表删除了,先apply再drop还是比较繁琐的,使用以下一条命令就可以同时完成这两个操作 下面这条命令相当于git stash apply

git stash pop

  如果我们执行git stash时工作目录的状态是部分文件已经加入了暂存区,部分文件没有,当我们执行git stash apply之后会发现所有文件都变成了未暂存的,如果想维持原来的样子操持原来暂存的文件仍然是暂存状态,可以加上--index参数

git stash apply --index

  还有这么一种情况,我们把原来的修改stash了,然后修复了其他一些东西并进行了提交,但是,这些提交的文件有些在之前已经被stash了,那么git stash apply时就很可能会遇到冲突,这种情况下就可以在stash时所以提交的基础上新建一个分支,然后再apply stash,当然,这两个步骤有一人简单的完成方法

git stash branch <branch name>

6. git config

6.1 proxy

$ git config http.proxy ip:port
$ git config https.proxy ip:port

6.2 credential

执行完毕会在在当前系统用户文件夹下生成一个名为.git-credentials的文件,如:C:\Users\Administrator\.git-credentials,再次提交代码时,输入密码后会将用户名密码以明文的方式保存在其中。
$ git config --global credential.helper store

6.3 core.editor

 使用vim编辑器
$ git config --global core.editor vim