上一篇文章已经介绍了如何在不同系统上安装Git,接下来详细介绍Git中常用的命令
获取仓库
获取仓库的方式有两种:第一种是新建了一个项目,并初始化为Git仓库;第二种是获取已有的Git仓库,比如从GitHub上克隆一份某项目的镜像仓库
初始化新仓库
初始化一个新仓库的方法很简单,在项目文件夹下打开Git Bash,执行$ git init
命令,文件夹中会多出一个.git
文件夹,这是新仓库就创建成功了
克隆已有仓库
克隆仓库也很简单,比如要克隆Vuejs的仓库,需要$ git clone
命令
$ git clone https://github.com/vuejs/vue.git
记录更新
在新初始化的仓库中,新增a.txt
和b.txt
两个文件,随便写点东西
内容添加完成后,使用$ git add
命令跟踪这两个文件的变化
# 需要跟踪的文件
$ git add a.txt b.txt
# 或者跟踪所有文件
$ git add .
指定完需要跟踪的文件后,使用$ git commit
命令暂存已修改的文件。文件暂存的目的是为了以后可以随时回到这次的修改
$ git commit -m "初始化"
文件暂存后,如果又修改了文件内容,只需要再次执行$ git add
和$ git commit
命令,或者执行$ git commit -am
命令,它是前两个命令的合成版
查看修改信息
$ git status
命令可以查看状态的变化信息,$ git diff
可以查看具体发生了哪些变化
忽略某些文件
在添加追踪文件时,通常使用$ git add .
,这种方式会追踪文件夹下的所有文件,但有的时候需要忽略某些文件,这个时候可以配置.gitignore
文件
在项目目录下新建一个.gitignore
文件,可以自定义不需要跟踪的文件,文件格式规范如下:
1、所有的空行,或者以注释符号 # 开头的行都会被 Git 忽略
2、可以使用标准的glob模式匹配
3、匹配模式最后跟反斜杠(/)说明要忽略的是目录
4、要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反
glob模式是指shell所使用的简化了的正则表达式,星号*
匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符;问号?
只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有0到9的数字)
# 忽略所有 .md 结尾的文件
*.md
# NOTE.md 不会忽略
!NOTE.md
# 仅仅忽略项目根目录下的 dist 文件,不包括 subdir/dist
/dist
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc 文件夹下的所有txt文件,包括子目录
doc/**/*.txt
如果修改.gitignore
后发现无效,先执行git rm -r --cached .
清除缓存
查看更新记录
$ git log
命令可以查看commit记录
修改提交
当一个功能开发完毕,我们会执行commit操作。commit完成后,突然发现了一些小问题需要立即修改,但是这些修改不值得单独执行一次commit,这时就可以使用修改提交
$ git commit -am "完成支付功能"
# 修改一些问题,再次提交
$ git add .
$ git commit --amend
撤销提交
如果你不小心把用户名和密码提交到了远程,可以通过$ git reset --soft HEAD~1
命令撤销最近一次提交,这种方式会保留你的修改,只是删除了一次提交记录。然后把私有信息删除后再提交到远程就行了
$ git reset --soft HEAD~1
提交回滚
有时候可能需要回退到某个历史提交,查看之前提交的代码,这时候可以使用$ git reset --hard <hash:7>
命令
# 查看提交记录
$ git log --oneline
# 回退得到指定版本
$ git reset --hard fab66f8
回滚后如果需要在回滚回去,可以这么做
# 查看之前提交记录,找到hash值
$ git reflog
# 回退得到指定版本
$ git reset --hard c747387
# 注意: 提交到远程时,由于本地是落后的分支,直接push是不行的
# 可以使用 `git push -u origin develop -f`强制推送,但是如果说别人已经修改了代码,会被覆盖掉