一些需要掌握的 Git 命令
所有的用法都可以在《Pro Git》中找到


Git 的基本概念


(提交)版本

一次提交可以看作是一个版本,它包含了该次提交的所有文件

提交的哈希值(hash)

每个提交独一无二的身份表示,需要通过它来切换各个版本,可通过 git log 查看

版本库

Git 的版本库可以理解成一个存放了各个提交版本的数据库,你可以从中恢复保存的历史版本

忽略文件

.gitignore 中指定的文件都不会被保存在版本库里,多是测试文件

HEAD 指针

HEAD 指向一个版本库里的一个提交版本,表示当前的工作是基于某一个版本,它是切换版本的核心

文件的三种状态:

  1. 已提交(commited):表示已被 Git 安全地保存在本地数据库

  2. 已修改(modified):表示修改了某个文件,但还没有提交保存

  3. 已暂存(staged):表示把已修改的文件放在下次提交时要保存的清单中

其实文件还有一种状态:忽略(ignored),表示 Git 不会保存该文件


常用的 Git 命令


[] 表示可选项;<> 表示必填项


需要掌握的

命令 简介
git add <文件或路径> 将文件或路径加入暂存区
git commit [-m] [-a] 将暂存区的文件提交到 Git版本库
git checkout <文件或路径> 将指定文件或路径恢复到当前版本里的样子
git log [-n] 查看提交信息
git clone <远程仓库地址> 克隆远程仓库,会将远程仓库的根目录完整复制到当前目录下
git remote -v 查看远程仓库信息
git remote add <远程仓库名> <仓库地址> 添加远程仓库,远程仓库名需要自己取
git push [-u] <远程仓库名> <远程分支> 将本地仓库的当前分支推送到远程仓库的指定分支
git pull 拉取远程仓库,会将 HEAD 改为和远程仓库里的一样
git fetch 抓取远程仓库的数据,但是不会影响 HEAD 的指向

与分支相关的

命令 简介
git branch <分支名> 添加新的分支
git switch <分支名> 切换到指定分支
git branch -d <分支名> 删除指定分支
git merge <另一分支> 将当前分支和另一分支合并

了解即可的

命令 简介
git reset <提交的哈希值> 回到哈希值对应的版本
git rebase <另一分支> 也是合并,但是会生成更干净的提交历史


最佳实践


  1. 给远程仓库起个有意义的名字,例如

     # 将默认的远程仓库名 origin 改成 github
     git remote rename origin github
    
  2. 设置默认推拉仓库分支,例如:

     # 推送到 github 表示的远程仓库的 master 分支,并设置其为默认推拉仓库分支
     git push -u github master
        
     # 然后就可以只用 git push,而不需要指定仓库分支
     git push
    
  3. 设置命令别名,例如:

     # 设置别名 info
     git config --global alias.info 'log --pretty=format:"%h - %an, %ar : %s" --graph'
    
     # 然后就可以用 git info 查看格式化过的提交信息
     git push
    
  4. 多使用分支,尤其是在多人协作的仓库上,尽量在自己新建的分支上修改代码,需要提交时,和主分支合并衍合后再提交

  5. 在推送到远程仓库前,最好先拉取远程仓库