纲领:
其实 Git 的学习就是四个区之间关系转换的学习, 以及各个区本身一些操作的学习. 每个操作都有其特定的作用区. 学习时注意区分, 可事半功倍!
注: 尤其要注意, Git 是以修改为单位的.
一, 配置
关键命令: "git config"
- Git config --global user.name "yourName"
- Git config --global user.email "email@example.com"
二, 初始化
关键命令:"git init"
- // 切换到工作目录, 然后执行初始化命令
- Git init
三, 添加文件
关键命令:"git add xx.file"
Git add test.txt
四, 提交文件
关键命令:"git commit -m" 添加了 xx.file 文件 "
"git commit -m" 添加了 test.txt 文件 "
五, 状态查看
关键命令:"git status"
Git status
六, 查看差异
关键命令:"git diff xx.file"
注: 对比的是工作区与暂存区
Git diff test.txt
七, 查看版本历史
关键命令:"git log" ,"git log --pretty=oneline"
注: 查看的都是 repo 库的改动
- Git log
- # 简化输出可用参数 --pretty=oneline
- Git log --pretty=oneline
- # 等号两边没有空格
八, 回退历史版本
关键命令:"git reset --hard commit_id"
注: 此命令其实就是修改 repo 库 head 指针的指向位置
参数解释:
Git reset 有三个主要参数
--soft --------> 只有 repo 动
--mixed ----->repo 和 stage 动 (注: 默认缺省值)
--hard -------> repo,stage,workspace 都动
commit_id 主要有两种表示方式
HEAD 关键字表示
hash 值前四位表示
- Git reset --hard HEAD^
- #--hard 表示三个区域完全回退
- #HEAD^ 表示回退的目的地,^ 号表示 HEAD 指针的上一个版本. HEAD^ 也可用 commit id 的 hash 值的前几位替代, Git 会自动索引.
- Git reset --hard 142e
九, 回流
关键命令:"git reflog"
注: 作用与 repo 库
- Git reflog
- # 用于回流回退过的情况
十, 放弃工作区的修改
关键命令:"git checkout -- xx.file"
注: 从暂存去签出, 覆盖工作区.
- Git checkout -- test.txt
- # -- 不能少
十一, 删除暂存区的内容 (参考第八条)
关键命令:"git reset HEAD xx.file"
参数解释:
默认缺省 --mixed
xx.file 在单一文件时可缺省, 默认整个文件夹同时修改
HEAD 指向当前 head 指针
注: 本质依旧是修改 repo 库的 head 指针, 但因为缺省值同时修改了 stage, 所以效果像是删除了暂存区.
- Git reset HEAD test.txt
- # 此操作不会影响工作区
十二, 删除工作区文件
关键命令:"git rm xx.file"
注: 在暂存区工作, 同 Git add xx.file, 所以还需要一步 commit
- Git rm test.txt
- # 会先执行工作区的文件删除操作 `rm test.txt`
- Git commit -m "rm test.txt"
十三, 远程仓库
SSH-keygen -t rsa -C "youremail@example.com"
创建私钥与公钥
在 GitHub 添加公钥
创建 GitHub 仓库 (后续可直接按 GitHub 的提示操作即可.)
在本地 Git 工作区运行
Git remote add origin Git@GitHub.com:name/repoName.Git
关联本地 repo 与远程 repo
初次推送
Git push -u origin master
后续推送
Git push origin master
注: SSH 警告可以忽略, 直接 yes
来源: http://www.jianshu.com/p/5b14ac6a6a7f