说明
一般情况下掌握如下大部分git常用命令就够用了。如果执行git命令出错,git一般会给出错误提示和解决方案来处理该错误。
git clone
从git仓库克隆代码到本地:
git clone ssh://git@xxx/xxxx/xxx/demo_app.git
git clone https://gitxxx/xxxx/xxx/demo_app.git
说明:git仓库一般提供了http和ssh两种克隆地址。其中ssh克隆方式需要提前将自己本机生成的ssh key的公钥配置到git仓库上。
git init
一般情况下,git仓库创建一个新的git时,这一步就已经做好了。本地只需要通过git clone即可把代码克隆到本地。
git status
获取当前git分支的状态。包括普通状态、提交状态、错误状态等等信息。
git log
显示当前提交记录信息。
显示单次提交记录的修改内容。
git log xxxxxx(提交记录md5) -p -1
注意:其中xxxxxx(提交记录md5)表示每次提交的md5值。最后-1表示一条记录。
- 显示name(提交者名称)提交的记录,类似于对name(提交者名称)进行过滤。
git log --author name(提交者名称)
git pull
从git仓库(origin)拉取代码到本地。
一般需要清理当前git分支状态,否则很容易因为本地有修改导致代码冲突而拉取失败。
说明:git pull是git fetch和git rebase的合用。可以在非master分支上拉取master提交内容。比如dev分支:
git pull origin master
说明:该命令可以把master上提交拉取到本地dev分支,然后通过git push origin dev可以推送到git仓库(origin)dev分支,这样dev分支就和master保持一致了。
git diff
显示修改内容。包括增加、删除、改动几个部分。
git add
添加修改内容。
这里可以添加单个文件,也可以添加所有文件。
git add .
git add /xx/xx/file.js
git add /xx/xx/*
说明:第一个添加所有改动,第二个添加单个文件,第三个添加/xx/xx/路径下所有修改。
git commit
- 提交修改。
git commit -m "feat : xxx : add new file"
- git commit -a -m
直接包含git add步骤,即提交修改时可以省略git add步骤。
git commit -a -m "feat : xxx : add new file"
git push
从本地分支将代码推送到git仓库(origin)。
一般如果不在master分支,需要推送时,需要跟该分支名称。比如当前分支为dev分支,则命令为:
git push origin dev
注意:只有经过git add和git commit之后,git push才有有效的推送内容。
git branch
- 获取当前分支名称:
MacBook-Pro xxx-app-demo % git branch
dev
* master
说明:这个时候会把已经切过的分支也会显示出来。并在当前分支前显示一个“*”号。
- 如果需要显示所有的分支,则执行:
git branch -a
说明:这个不仅仅会显示本地的分支,还会把git仓库(origin)分支也一起显示出来。
- 可以通过git branch -d来删除分支。
git branch -d branch_name(分支名称)
git checkout
这是一个很牛逼的多功能命令。
可以清理当前分支,即将当前分支的修改内容清理掉。该命令可以结合git clean -df一起来做清理工作。
git checkout .
git checkout /xx/xx/xx.js
- 可以将分支切换到具体提交记录为锚点位置,这个可以接tag/提交记录等
git checkout tag_1.0.0
git checkout xxxxxxx(提交记录)
- 可以新建分支。
git checkout -b new_branch
git clean -df
将新增文件从磁盘删除。
git reset
回退。
git reset --hard HEAD
git reset --hard HEAD~
git reset --hard xxxxx(提交记录)
说明:HEAD表示当前最后一次提交记录。~表示HEAD的前一次提交记录。~~表示HEAD的前第二次提交记录。
git revert
回滚。
和回退不一样。这个是将HEAD或者xxxxxx(提交记录)撤销修改后再当作一次提交记录。
git revert xxxxxx
git merge
合并分支。比如master分支合并dev分支。
git merge dev
注意:如果合并有冲突,这个时候不要做git rebase操作,而要根据合并冲突进行修改,再提交即可。
git tag
打tag。
提交tag。如下提交所有打的tag。
git push --tags
git cherry-pick
将某一条提交记录合入到当前分支。
git cherry-pick xxxxx(提交记录)
这个操作非常好用。特别适合在切分支提交应用商店上架审核,然后被拒绝需要做整改时使用了:master分支和切的分支两边同步修改的提交记录。
git stash
将修改提交暂存区。也可以指定部分文件提交暂存区。
比如将修改提交暂存区,然后做其他操作。执行完后通过git stash pop释放出来。git stash pop
将修改从暂存区释放出来。
git fetch
拉取代码。和git pull相比,缺少git rebase步骤。
git rebase
同步git tree,即同步各分支时间线到同一条线上来。
git获取branch名称简称:
该命令一般用于自动化打包脚本:比如切到非master分支打包的情况,就可能需要获取到当前分支的简称。
- 命令如下:
git symbolic-ref --short HEAD
git remote -v
获取当前项目git仓库地址(即git clone克隆地址)。
git切到对应的tag
git切到某个commit
git restore
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .eslintrc.js
modified: .stylelintrc.js
modified: babel.config.js
git module
git里面比较难的就是git module相关的命令了。这个涉及到模块组件间的协同。有兴趣的可以自行研究一下其中的奥妙。