Git属于分散型版本管理系统。版本管理就是管理更新的历史记录。
安装Git
Mac和Linux都预装了Git。
Windows使用msysGit:http://msysgit.github.io/
Use git bash only
初始设置
设置姓名和邮箱地址
git config --global user.name "Firstname Lastname"
git config --global user.email "[email protected]"
将color.ui设置为auto可以让命令的输出拥有更高的可读性
git config --global color.ui auto
设置SSH Key
$ssh-keygen -t rsa -C "email"
之后直接回车,不用填写东西。之后会让你输入密码。然后就生成一个目录.ssh ,里面有两个文件:id_rsa(私有密钥) , id_rsa.pub(公开密钥),还有一个fingerprint值
把这个SSH放到github上。用公钥。先在GitHub上注册一个用户,然后进入account-setting ,把id_rsa.pub的内容复制进去就可以了。
测试OK。输入命令:$ssh -T [email protected]
基本操作
- 定位——
cd ~/
- git Init ——初始化仓库
mkdir git-tutorial
cd git-tutorial
然后会生成.git目录,这个目录里存储着管理当前目录内容所需的仓库数据。
将这个目录的内容称为”附属于该仓库的工作树“。
- git status——查看仓库状态
git status
建立README.md文件作为管理对象,未第一次提交做前期准备
touch README.md
- git add——向暂存区中添加文件
将其加入暂存区(Stage或者Index)中。
git add README.md
- git commit——保存仓库的历史记录
- 记述一行提交信息
git commit -m "First commit"
First commit是提交信息
- 记述详细提交信息
git commit```
执行后编辑器就会启动,在编辑器中记述提交信息的格式如下:
第一行:用一行文字简述提交的更改内容
第二行:空行
第三行以后:记述更改的原因和详细内容
`Esc`+`shift`+`z`+`shift`+`z`即可推出编辑器并保存
`Esc`+`:`+`help`可查看编辑器帮助
* **git log**——查看提交日志
commit栏旁是指向这个提交的哈希值。
* `git log --pretty=short `——只显示提交信息的第一行
* `git log README.md `——只显示指定目录、文件的日志
* ` git log -p` ——显示文件的改动
* **git diff**——查看更改前后的差别
在刚刚提交的README.md中写:
>\#Git 教程
* `git diff`——查看工作树和暂存区的差别
然后将README.md加入暂存区:git add README.md
* `git diff HEAD`——查看工作树和最新提交的差别
> **养成好习惯**:在执行git commit前先执行git diff HEAD,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交,这里的HEAD是指向当前分支中最新一次提交的指针。
确认过两个提交之间的差别后就可以执行commit命令:
git commit -m "Add index"
查看提交日志,确认提交成功。
***
####分支的操作
* **git branch**——显示分支一览表
* **git checkout -b**——创建、切换分支
git checkout -b feature-A等同于
git branch feature-A
git checkout feature-A
在分支A下修改README.md并提交
* 切换回上一个分支——**git checkout -**
* **git merge**——合并分支
首先切换到master分支
git checkout master
然后
git merge --no-ff feature-A
* **git log --graph**——以图表形式查看分支
***
####更改提交的操作
* **git reset**——回溯历史版本
* 回溯到创建分支A前
git reset --hard 目标时间点的哈希值
* 创建分支B修改README.md并提交
* 推进至分支A合并后的状态
`git reflog`可查看当前仓库执行过的操作的日志。找到对应哈希值并回到当时的状态。
* 消除冲突
合并分支B时分支A更改的部分和分支B发生了冲突。
修改README.md文件,然后提交。
* **git commit --amend**——修改提交信息
编辑器启动,修改提交信息后保存退出。
* **git rebase -i**——压缩历史
* 创建分支C修改README.md并提交C,故意留下拼写错误,然后:git commit -am "Add feature-C"完成两步操作
* 修正并提交:git commit -am "Fix typo",`错字漏字等失误称作typo`
* ```
git rebase -i HEAD~2
出现
pick 哈希值 Add feature-C
pick 哈希值 Fix typo
将pick改为fixup便可
分支C合并至master分支。
推送至远程仓库
- git remote add——添加远程仓库
git remote add origin [email protected]:DumplingsLi/git-tutorial.git
Git自动将远程仓库的名称设置为origin(标识符)
* **git push**——推送至远程仓库
* 推送至master分支
git push -u origin master
* 推送至master以外的分支
git checkout -b feature-D
git push -u origin feature-D
***
###从远程仓库获取
* **git clone**——获取远程仓库
* 获取远程仓库
git clone [email protected]:DumplingsLi/git-tutorial.git
查看当前分支的相关信息
git branch -a
* 获取远程的feature-D分支
git checkout -b feature-D(本地仓库新建分支名称) origin/feature-D(获取来源的分支名称)
修改分支D并推送。
* **git pull**——获取最新的远程仓库分支
git pull origin feature-D
一些资源:
[Pro Git](http://git-scm.com/book/zh/v1) 作者:[Scott Chacon](https://github.com/schacon)
[LearningGitBranching](http://pcottle.github.io/learnGitBranching/)
[tryGit](http://try.github.io/)
[Github pages的一些用法](http://www.cnblogs.com/ztoz/p/5515475.html)