├── .gitignore ├── README.md └── assets ├── git.png └── gitcz.png /.gitignore: -------------------------------------------------------------------------------- 1 | # osx 2 | .DS_Store 3 | 4 | # vscode 5 | .vscode 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Git的奇技淫巧:see_no_evil: 2 | > Git常用命令集合,Fork于[tips](https://github.com/git-tips/tips)项目 3 | 4 | Git是一个 “分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过 “回撤” 这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用 “回撤” 是找不回来的。而 “版本管理工具” 能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。 5 | 6 | 下面的内容就是列举了常用的 Git 命令和一些小技巧,可以通过 "页面内查找" 的方式进行快速查询:`Ctrl/Command+f`。 7 | 8 | ## 开卷必读 9 | *如果之前未使用过 Git,可以学习 [Git 小白教程](http://rogerdudler.github.io/git-guide/index.zh.html)入门* 10 | 11 | 1. **一定要先测试命令的效果后**,再用于工作环境中,以防造成不能弥补的后果!**到时候别拿着砍刀来找我** 12 | 2. 所有的命令都在`git version 2.7.4 (Apple Git-66)`下测试通过 13 | 3. 统一概念: 14 | - 工作区:改动(增删文件和内容) 15 | - 暂存区:输入命令:`git add 改动的文件名`,此次改动就放到了 ‘暂存区’ 16 | - 本地仓库(简称:本地):输入命令:`git commit 此次修改的描述`,此次改动就放到了 ’本地仓库’,每个 commit,我叫它为一个 ‘版本’。 17 | - 远程仓库(简称:远程):输入命令:`git push 远程仓库`,此次改动就放到了 ‘远程仓库’(GitHub 等) 18 | - commit-id:输出命令:`git log`,最上面那行 `commit xxxxxx`,后面的字符串就是 commit-id 19 | 4. 如果喜欢这个项目,欢迎 Star、提交 Pr、[反馈问题](https://github.com/521xueweihan/git-tips/issues)😊 20 | 21 | ## 目录 22 | * [展示帮助信息](#展示帮助信息) 23 | * [回到远程仓库的状态](#回到远程仓库的状态) 24 | * [重设第一个commit](#重设第一个-commit) 25 | * [展示工作区和暂存区的不同](#展示工作区和暂存区的不同) 26 | * [展示暂存区和最近版本的不同](#展示暂存区和最近版本的不同) 27 | * [展示暂存区、工作区和最近版本的不同](#展示暂存区工作区和最近版本的不同) 28 | * [快速切换到上一个分支](#快速切换到上一个分支) 29 | * [删除已经合并到 master 的分支](#删除已经合并到-master-的分支) 30 | * [展示本地分支关联远程仓库的情况](#展示本地分支关联远程仓库的情况) 31 | * [关联远程分支](#关联远程分支) 32 | * [列出所有远程分支](#列出所有远程分支) 33 | * [列出本地和远程分支](#列出本地和远程分支) 34 | * [创建并切换到本地分支](#创建并切换到本地分支) 35 | * [从远程分支中创建并切换到本地分支](#从远程分支中创建并切换到本地分支) 36 | * [删除本地分支](#删除本地分支) 37 | * [删除远程分支](#删除远程分支) 38 | * [重命名本地分支](#重命名本地分支) 39 | * [查看标签](#查看标签) 40 | * [查看标签详细信息](#查看标签详细信息) 41 | * [本地创建标签](#本地创建标签) 42 | * [推送标签到远程仓库](#推送标签到远程仓库) 43 | * [删除本地标签](#删除本地标签) 44 | * [删除远程标签](#删除远程标签) 45 | * [切回到某个标签](#切回到某个标签) 46 | * [放弃工作区的修改](#放弃工作区的修改) 47 | * [恢复删除的文件](#恢复删除的文件) 48 | * [以新增一个 commit 的方式还原某一个 commit 的修改](#以新增一个-commit-的方式还原某一个-commit-的修改) 49 | * [回到某个 commit 的状态,并删除后面的 commit](#回到某个-commit-的状态并删除后面的-commit) 50 | * [修改上一个 commit 的描述](#修改上一个-commit-的描述) 51 | * [查看 commit 历史](#查看-commit-历史) 52 | * [显示本地更新过 HEAD 的 git 命令记录](#显示本地更新过-head-的-git-命令记录) 53 | * [修改作者名](#修改作者名) 54 | * [修改远程仓库的 url](#修改远程仓库的-url) 55 | * [增加远程仓库](#增加远程仓库) 56 | * [列出所有远程仓库](#列出所有远程仓库) 57 | * [查看两个星期内的改动](#查看两个星期内的改动) 58 | * [把 A 分支的某一个 commit,放到 B 分支上](#把-A-分支的某一个-commit-放到-B-分支上) 59 | * [给 git 命令起别名](#给-git-命令起别名) 60 | * [存储当前的修改,但不用提交 commit](#存储当前的修改但不用提交-commit) 61 | * [保存当前状态,包括 untracked 的文件](#保存当前状态包括-untracked-的文件) 62 | * [展示所有 stashes](#展示所有-stashes) 63 | * [回到某个 stash 的状态](#回到某个-stash-的状态) 64 | * [回到最后一个 stash 的状态,并删除这个 stash](#回到最后一个-stash-的状态并删除这个-stash) 65 | * [删除所有的 stash](#删除所有的-stash) 66 | * [从 stash 中拿出某个文件的修改](#从-stash-中拿出某个文件的修改) 67 | * [展示所有 tracked 的文件](#展示所有-tracked-的文件) 68 | * [展示所有 untracked 的文件](#展示所有-untracked-的文件) 69 | * [展示所有忽略的文件](#展示所有忽略的文件) 70 | * [强制删除 untracked 的文件](#强制删除-untracked-的文件) 71 | * [强制删除 untracked 的目录](#强制删除-untracked-的目录) 72 | * [展示简化的 commit 历史](#展示简化的-commit-历史) 73 | * [查看某段代码是谁写的](#查看某段代码是谁写的) 74 | * [把某一个分支到导出成一个文件](#把某一个分支到导出成一个文件) 75 | * [从包中导入分支](#从包中导入分支) 76 | * [执行 rebase 之前自动 stash](#执行-rebase-之前自动-stash) 77 | * [从远程仓库根据 ID,拉下某一状态,到本地分支](#从远程仓库根据-ID-拉下某一状态-到本地分支) 78 | * [详细展示一行中的修改](#详细展示一行中的修改) 79 | * [清除 `.gitignore` 文件中记录的文件](#清除-gitignore-文件中记录的文件) 80 | * [展示所有 alias 和 configs](#展示所有-alias-和-configs) 81 | * [展示忽略的文件](#展示忽略的文件) 82 | * [commit 历史中显示 Branch1 有的,但是 Branch2 没有 commit](#commit-历史中显示-Branch1-有的但是-Branch2-没有-commit) 83 | * [在 commit log 中显示 GPG 签名](#在-commit-log-中显示-GPG-签名) 84 | * [删除全局设置](#删除全局设置) 85 | * [新建并切换到新分支上,同时这个分支没有任何 commit](#新建并切换到新分支上同时这个分支没有任何-commit) 86 | * [展示任意分支某一文件的内容](#展示任意分支某一文件的内容) 87 | * [clone 下来指定的单一分支](#clone-下来指定的单一分支) 88 | * [忽略某个文件的改动](#忽略某个文件的改动) 89 | * [忽略文件的权限变化](#忽略文件的权限变化) 90 | * [以最后提交的顺序列出所有 Git 分支](#以最后提交的顺序列出所有-Git-分支) 91 | * [在 commit log 中查找相关内容](#在-commit-log-中查找相关内容) 92 | * [把暂存区的指定 file 放到工作区中](#把暂存区的指定-file-放到工作区中) 93 | * [强制推送](#强制推送) 94 | * [一图详解](#一图详解) 95 | * [优雅的提交Commit信息](#优雅的提交Commit信息) 96 | * [联系我](#联系我) 97 | 98 | ## 展示帮助信息 99 | ```sh 100 | git help -g 101 | ``` 102 | The command output as below: 103 | 104 | ``` 105 | The common Git guides are: 106 | attributes Defining attributes per path 107 | cli Git command-line interface and conventions 108 | core-tutorial A Git core tutorial for developers 109 | cvs-migration Git for CVS users 110 | diffcore Tweaking diff output 111 | everyday A useful minimum set of commands for Everyday Git 112 | glossary A Git Glossary 113 | hooks Hooks used by Git 114 | ignore Specifies intentionally untracked files to ignore 115 | modules Defining submodule properties 116 | namespaces Git namespaces 117 | repository-layout Git Repository Layout 118 | revisions Specifying revisions and ranges for Git 119 | tutorial A tutorial introduction to Git 120 | tutorial-2 A tutorial introduction to Git: part two 121 | workflows An overview of recommended workflows with Git 122 | 123 | 'git help -a' and 'git help -g' list available subcommands and some concept guides. See 'git help ' or 'git help ' to read about a specific subcommand or concept. 124 | ``` 125 | 126 | ## 回到远程仓库的状态 127 | 128 | 抛弃本地所有的修改,回到远程仓库的状态。 129 | ```sh 130 | git fetch --all && git reset --hard origin/master 131 | ``` 132 | 133 | ## 重设第一个 commit 134 | 135 | 也就是把所有的改动都重新放回工作区,并**清空所有的 commit**,这样就可以重新提交第一个 commit 了 136 | 137 | ```sh 138 | git update-ref -d HEAD 139 | ``` 140 | 141 | ## 展示工作区和暂存区的不同 142 | 143 | 输出**工作区**和**暂存区**的 different (不同)。 144 | 145 | ```sh 146 | git diff 147 | ``` 148 | 149 | 还可以展示本地仓库中任意两个 commit 之间的文件变动: 150 | ```sh 151 | git diff 152 | ``` 153 | 154 | ## 展示暂存区和最近版本的不同 155 | 156 | 输出**暂存区**和本地最近的版本 (commit) 的 different (不同)。 157 | ```sh 158 | git diff --cached 159 | ``` 160 | 161 | ## 展示暂存区、工作区和最近版本的不同 162 | 163 | 输出**工作区**、**暂存区** 和本地最近的版本 (commit) 的 different (不同)。 164 | 165 | ```sh 166 | git diff HEAD 167 | ``` 168 | 169 | ## 快速切换到上一个分支 170 | 171 | ```sh 172 | git checkout - 173 | ``` 174 | 175 | ## 删除已经合并到 master 的分支 176 | 177 | ```sh 178 | git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d 179 | ``` 180 | 181 | ## 展示本地分支关联远程仓库的情况 182 | ```sh 183 | git branch -vv 184 | ``` 185 | 186 | ## 关联远程分支 187 | 188 | 关联之后,`git branch -vv` 就可以展示关联的远程分支名了,同时推送到远程仓库直接:`git push`,不需要指定远程仓库了。 189 | ```sh 190 | git branch -u origin/mybranch 191 | ``` 192 | 193 | 或者在 push 时加上 `-u` 参数 194 | ```sh 195 | git push origin/mybranch -u 196 | ``` 197 | 198 | ## 列出所有远程分支 199 | 200 | -r 参数相当于:remote 201 | ```sh 202 | git branch -r 203 | ``` 204 | 205 | ## 列出本地和远程分支 206 | 207 | -a 参数相当于:all 208 | ```sh 209 | git branch -a 210 | ``` 211 | 212 | ## 创建并切换到本地分支 213 | ```sh 214 | git checkout -b 215 | ``` 216 | 217 | ## 从远程分支中创建并切换到本地分支 218 | 219 | ```sh 220 | git checkout -b origin/ 221 | ``` 222 | 223 | ## 删除本地分支 224 | 225 | ```sh 226 | git branch -d 227 | ``` 228 | 229 | ## 删除远程分支 230 | 231 | ```sh 232 | git push origin --delete 233 | ``` 234 | 235 | 或者 236 | 237 | ```sh 238 | git push origin : 239 | ``` 240 | 241 | ## 重命名本地分支 242 | 243 | ```sh 244 | git branch -m 245 | ``` 246 | 247 | ## 查看标签 248 | 249 | ```sh 250 | git tag 251 | ``` 252 | 展示当前分支的最近的 tag 253 | 254 | ```sh 255 | git describe --tags --abbrev=0 256 | ``` 257 | 258 | ## 查看标签详细信息 259 | 260 | ```sh 261 | git tag -ln 262 | ``` 263 | 264 | ## 本地创建标签 265 | 266 | ```sh 267 | git tag 268 | ``` 269 | 270 | 默认 tag 是打在最近的一次 commit 上,如果需要指定 commit 打 tag: 271 | ```sh 272 | $ git tag -a -m "v1.0 发布(描述)" 273 | ``` 274 | 275 | ## 推送标签到远程仓库 276 | 277 | 首先要保证本地创建好了标签才可以推送标签到远程仓库: 278 | 279 | ```sh 280 | git push origin 281 | ``` 282 | 283 | 一次性推送所有标签,同步到远程仓库: 284 | 285 | ```sh 286 | git push origin --tags 287 | ``` 288 | 289 | ## 删除本地标签 290 | 291 | ```sh 292 | git tag -d 293 | ``` 294 | 295 | ## 删除远程标签 296 | 297 | 删除远程标签需要**先删除本地标签**,再执行下面的命令: 298 | 299 | ```sh 300 | git push origin :refs/tags/ 301 | ``` 302 | 303 | ## 切回到某个标签 304 | 305 | 一般上线之前都会打 tag,就是为了防止上线后出现问题,方便快速回退到上一版本。下面的命令是回到某一标签下的状态: 306 | ```sh 307 | git checkout -b branch_name tag_name 308 | ``` 309 | 310 | ## 放弃工作区的修改 311 | ```sh 312 | git checkout 313 | ``` 314 | 315 | 放弃所有修改: 316 | ```sh 317 | git checkout . 318 | ``` 319 | 320 | ## 恢复删除的文件 321 | ```sh 322 | git rev-list -n 1 HEAD -- #得到 deleting_commit 323 | 324 | git checkout ^ -- #回到删除文件 deleting_commit 之前的状态 325 | ``` 326 | 327 | ## 以新增一个 commit 的方式还原某一个 commit 的修改 328 | 329 | ```sh 330 | git revert 331 | ``` 332 | 333 | ## 回到某个 commit 的状态,并删除后面的 commit 334 | 335 | 和 revert 的区别:reset 命令会抹去某个 commit id 之后的所有 commit 336 | 337 | ```sh 338 | git reset #默认就是-mixed参数。 339 | 340 | git reset –mixed HEAD^ #回退至上个版本,它将重置HEAD到另外一个commit,并且重置暂存区以便和HEAD相匹配,但是也到此为止。工作区不会被更改。 341 | 342 | git reset –soft HEAD~3 #回退至三个版本之前,只回退了commit的信息,暂存区和工作区与回退之前保持一致。如果还要提交,直接commit即可   343 | 344 | git reset –hard #彻底回退到指定commit-id的状态,暂存区和工作区也会变为指定commit-id版本的内容 345 | ``` 346 | 347 | ## 修改上一个 commit 的描述 348 | 349 | 如果暂存区有改动,同时也会将暂存区的改动提交到上一个 commit 350 | 351 | ```sh 352 | git commit --amend 353 | ``` 354 | 355 | ## 查看 commit 历史 356 | ```sh 357 | git log 358 | ``` 359 | 360 | ## 查看某段代码是谁写的 361 | 362 | blame 的意思为‘责怪’,你懂的。 363 | 364 | ```sh 365 | git blame 366 | ``` 367 | 368 | ## 显示本地更新过 HEAD 的 git 命令记录 369 | 370 | 每次更新了 HEAD 的 git 命令比如 commint、amend、cherry-pick、reset、revert 等都会被记录下来(不限分支),就像 shell 的 history 一样。 371 | 这样你可以 reset 到任何一次更新了 HEAD 的操作之后,而不仅仅是回到当前分支下的某个 commit 之后的状态。 372 | 373 | ```sh 374 | git reflog 375 | ``` 376 | 377 | ## 修改作者名 378 | 379 | ```sh 380 | git commit --amend --author='Author Name ' 381 | ``` 382 | 383 | ## 修改远程仓库的 url 384 | 385 | ```sh 386 | git remote set-url origin 387 | ``` 388 | 389 | ## 增加远程仓库 390 | 391 | ```sh 392 | git remote add origin 393 | ``` 394 | 395 | ## 列出所有远程仓库 396 | 397 | ```sh 398 | git remote 399 | ``` 400 | 401 | ## 查看两个星期内的改动 402 | ```sh 403 | git whatchanged --since='2 weeks ago' 404 | ``` 405 | 406 | ## 把 A 分支的某一个 commit,放到 B 分支上 407 | 408 | 这个过程需要 `cherry-pick` 命令,[参考](http://sg552.iteye.com/blog/1300713#bc2367928) 409 | 410 | ```sh 411 | git checkout && git cherry-pick 412 | ``` 413 | 414 | ## 给 git 命令起别名 415 | 416 | 简化命令 417 | 418 | ```sh 419 | git config --global alias. 420 | 421 | 比如:git status 改成 git st,这样可以简化命令 422 | 423 | git config --global alias.st status 424 | ``` 425 | 426 | ## 存储当前的修改,但不用提交 commit 427 | 428 | 详解可以参考[廖雪峰老师的 git 教程](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d966923e5c4134bc8bf98dfb03aea3000) 429 | ```sh 430 | git stash 431 | ``` 432 | 433 | ## 保存当前状态,包括 untracked 的文件 434 | 435 | untracked 文件:新建的文件 436 | ```sh 437 | git stash -u 438 | ``` 439 | 440 | ## 展示所有 stashes 441 | ```sh 442 | git stash list 443 | ``` 444 | 445 | ## 回到某个 stash 的状态 446 | ```sh 447 | git stash apply 448 | ``` 449 | 450 | ## 回到最后一个 stash 的状态,并删除这个 stash 451 | 452 | ```sh 453 | git stash pop 454 | ``` 455 | 456 | ## 删除所有的 stash 457 | 458 | ```sh 459 | git stash clear 460 | ``` 461 | 462 | ## 从 stash 中拿出某个文件的修改 463 | ```sh 464 | git checkout -- 465 | ``` 466 | 467 | ## 展示所有 tracked 的文件 468 | ```sh 469 | git ls-files -t 470 | ``` 471 | 472 | ## 展示所有 untracked 的文件 473 | ```sh 474 | git ls-files --others 475 | ``` 476 | 477 | ## 展示所有忽略的文件 478 | 479 | ```sh 480 | git ls-files --others -i --exclude-standard 481 | ``` 482 | 483 | ## 强制删除 untracked 的文件 484 | 485 | 可以用来删除新建的文件。如果不指定文件文件名,则清空所有工作的 untracked 文件。`clean` 命令,**注意两点**: 486 | 1. clean 后,删除的文件无法找回 487 | 2. 不会影响 tracked 的文件的改动,只会删除 untracked 的文件 488 | 489 | ```sh 490 | git clean -f 491 | ``` 492 | 493 | ## 强制删除 untracked 的目录 494 | 495 | 可以用来删除新建的目录,**注意**:这个命令也可以用来删除 untracked 的文件。详情见上一条 496 | 497 | ```sh 498 | git clean -df 499 | ``` 500 | 501 | ## 展示简化的 commit 历史 502 | ```sh 503 | git log --pretty=oneline --graph --decorate --all 504 | ``` 505 | 506 | ## 把某一个分支到导出成一个文件 507 | ```sh 508 | git bundle create 509 | ``` 510 | 511 | ## 从包中导入分支 512 | 513 | 新建一个分支,分支内容就是上面 `git bundle create` 命令导出的内容 514 | 515 | ```sh 516 | git clone repo.bundle -b 517 | ``` 518 | 519 | ## 执行 rebase 之前自动 stash 520 | 521 | ```sh 522 | git rebase --autostash 523 | ``` 524 | 525 | ## 从远程仓库根据 ID,拉下某一状态,到本地分支 526 | 527 | ```sh 528 | git fetch origin pull//head: 529 | ``` 530 | 531 | ## 详细展示一行中的修改 532 | 533 | ```sh 534 | git diff --word-diff 535 | ``` 536 | 537 | ## 清除 gitignore 文件中记录的文件 538 | 539 | ```sh 540 | git clean -X -f 541 | ``` 542 | 543 | ## 展示所有 alias 和 configs 544 | 545 | **注意:** config 分为:当前目录(local)和全局(golbal)的 config,默认为当前目录的 config 546 | 547 | ```sh 548 | git config --local --list (当前目录) 549 | git config --global --list (全局) 550 | ``` 551 | 552 | ## 展示忽略的文件 553 | ```sh 554 | git status --ignored 555 | ``` 556 | 557 | ## commit 历史中显示 Branch1 有的,但是 Branch2 没有 commit 558 | ```sh 559 | git log Branch1 ^Branch2 560 | ``` 561 | 562 | ## 在 commit log 中显示 GPG 签名 563 | ```sh 564 | git log --show-signature 565 | ``` 566 | 567 | ## 删除全局设置 568 | 569 | ```sh 570 | git config --global --unset 571 | ``` 572 | 573 | ## 新建并切换到新分支上,同时这个分支没有任何 commit 574 | 575 | 相当于保存修改,但是重写 commit 历史 576 | 577 | ```sh 578 | git checkout --orphan 579 | ``` 580 | 581 | ## 展示任意分支某一文件的内容 582 | 583 | ```sh 584 | git show : 585 | ``` 586 | 587 | ## clone 下来指定的单一分支 588 | ```sh 589 | git clone -b --single-branch https://github.com/user/repo.git 590 | ``` 591 | 592 | ## 忽略某个文件的改动 593 | 594 | 关闭 track 指定文件的改动,也就是 Git 将不会在记录这个文件的改动 595 | 596 | ```sh 597 | git update-index --assume-unchanged path/to/file 598 | ``` 599 | 600 | 恢复 track 指定文件的改动 601 | 602 | ```sh 603 | git update-index --no-assume-unchanged path/to/file 604 | ``` 605 | 606 | ## 忽略文件的权限变化 607 | 608 | 不再将文件的权限变化视作改动 609 | 610 | ```sh 611 | git config core.fileMode false 612 | ``` 613 | 614 | ## 以最后提交的顺序列出所有 Git 分支 615 | 616 | 最新的放在最上面 617 | 618 | ```sh 619 | git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ 620 | ``` 621 | 622 | ## 在 commit log 中查找相关内容 623 | 624 | 通过 grep 查找,given-text:所需要查找的字段 625 | 626 | 627 | ```sh 628 | git log --all --grep='' 629 | ``` 630 | 631 | ## 把暂存区的指定 file 放到工作区中 632 | 633 | 不添加参数,默认是 `-mixed` 634 | 635 | ```sh 636 | git reset 637 | ``` 638 | 639 | ## 强制推送 640 | 641 | ```sh 642 | git push -f 643 | ``` 644 | 645 | ## 一图详解 646 | 647 | ![](./assets/git.png) 648 | 649 | ## 优雅的提交Commit信息 650 | 651 | 使用[Angular团队提交规范](https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines) 652 | 653 | 主要有以下组成 654 | 655 | * 标题行: 必填, 描述主要修改类型和内容 656 | * 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等 657 | * 页脚注释: 放 Breaking Changes 或 Closed Issues 658 | 659 | 常用的修改项 660 | 661 | * type: commit 的类型 662 | * feat: 新特性 663 | * fix: 修改问题 664 | * refactor: 代码重构 665 | * docs: 文档修改 666 | * style: 代码格式修改, 注意不是 css 修改 667 | * test: 测试用例修改 668 | * chore: 其他修改, 比如构建流程, 依赖管理. 669 | * scope: commit 影响的范围, 比如: route, component, utils, build... 670 | * subject: commit 的概述 671 | * body: commit 具体修改内容, 可以分为多行 672 | * footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接. 673 | 674 | ### 使用`Commitizen`代替 git commit 675 | 676 | 可以使用[cz-cli](https://github.com/commitizen/cz-cli)工具代替 `git commit` 677 | 678 | 全局安装 679 | 680 | ```shell 681 | npm install -g commitizen cz-conventional-changelog 682 | 683 | echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc 684 | ``` 685 | 全局安装后使用 `git cz` 代替 `git commit`就可以了,如下图 686 | 687 | ![](./assets/gitcz.png) 688 | 689 | ## 联系我 690 | - 博客园:[削微寒](http://www.cnblogs.com/xueweihan/) 691 | - 或者直接提 Pr,Issues 692 | 693 | **[⬆ 返回顶部](#目录)** 694 | -------------------------------------------------------------------------------- /assets/git.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackfrued/git-tips/33a01ff7855aaf8458602084ad92f3240d378ecc/assets/git.png -------------------------------------------------------------------------------- /assets/gitcz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackfrued/git-tips/33a01ff7855aaf8458602084ad92f3240d378ecc/assets/gitcz.png --------------------------------------------------------------------------------