基础操作
0、本地安装git ---Mac中自带有git,所以不用自己安装
1、设置git的名字和邮箱(配置git的参数)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
# 这里设置的姓名和邮箱是在提交的时候用到的,是公开
3、去 githun官网 中注册github账号
4、要是自己本地的能够方便的链接github的代码库,需要进行SSH认证,
- 首先获取SSHKey
$ ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
邮箱处输入创建github账号的邮箱,敲回车会出现下面的文字
# Generating public/private rsa key pair...
# Enter file in which to save the key(/Users/bihairui/.ssh/id_rsa): (这里敲回车)
如果之前已经获取过,会出现下面的
# /Users/bihairui/.ssh/id_rsa already exists.
# Overwrite (y/n)? y
# 已经存在,问是否重写,输入"y",按回车
在下面输入两次相同的密码就可以
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
- 查看你的public key
$ cat ~/.ssh/id_rsa.pub
# (这个就是public key)ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
添加 ssh 到github中
id_rsa.pub 中的所有内容,粘贴到下面网址的 key 框中。title自定
添加SSH测试是否认证成功
$ ssh -T git@github.com
# 出现下面提示就是成功了
# Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
这样就添加好了SSH认证,以后用认证过的电脑就可以push文件到github中了
常用命令
git 创建
要使用git,首先要在需要git管理的目录下创建git仓库
$ git init
# Initialized empty Git repository in .....
查看git状态
$ git status
$ git status -s #git状态的简短输出命令
几种状态介绍
1、刚刚commit后的状态
# On branch master
# nothing to commit, working directory clean
2、在目录新添加了文件,还没有add
# On branch master
# Initial commit
#Untracked files:
# (use "git add <file>..." to include in what will be committed)
# nothing added to commit but untracked files present (use "git add" to track)
3、执行git add . 后
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
4、我们看到当执行 git add .命令后,在查看状态会有一个提示命令
$ git reset HEAD <file>
# 这个命令就是撤销暂存某个文件,<file>替换成文件名就可以了
添加到暂存区
$ git add . # (注意后面的 空格 + . )
# 如果需要添加单一的文件
$ git add readme.md
保存到本地仓库,并记录提交
$ git commit -m "message"
# message
# 156 files changed, 7809 insertions(+)
添加暂存,提交一起完成
如果只是对之前的文件进行修改,并没有添加新的,可以直接用
$ git commit -a -m "message"
这一条命令代替 git add . 和 git commit -m "message"
如果有新文件添加,就不能这样用了
查看提交日志
$ git log
# commit c9e7440600a12b48a8bc04fce401ea1937065bcb(哈希值)
# Author: xxxx <xxxx@163.com>
# Date: Mon Nov 23 21:39:48 2015 +0800
# First commit (这个是提交的message)
# 按回车能够打印更多log
# 按q,退出状态
$ git log --oneline # 简短日志
# ad43a3d hahaha
# 5dd8db2 hahah
# 14153a2 hahaha
$ git log --oneline --graph
# 查看什么时候出现过分支
$ git log --pretty=short
# 执行此语句,会打印简单日志
$ git reflog
# 当reset到之前的一个状态,git log只能打印以此处为终点的日志
# git reflog 能打印所有的操作日志
# 只要不进行 git 的 GC(Garbage Collection 垃圾回收),就能恢复到任意状态
$ git log --decorate
# 这个命令能够打印出带有标签的日志
查看更改前后的差别
$ git diff (只有在修改文件,但是还没有add的时候,才有作用)
# git diff 是区分本地工作库和暂存区的文件不同
$ git diff HEAD #查看工作树和最新状态的区别
好建议:在 git commit 之前先执行以下 git diff HEAD 查看以下有什么区别
移除git控制的文件
$ git rm
# git rm 删除本地的文件和版本库的文件
添加标签
$ git tag -a "1.1.0" -m "This is a tag"
# 添加版本和描述的标签
$ git log --decorate
# 这个命令能够打印出带有标签的日志
$ git tag
# 列出所有tag
$ git tag [tag]
# 新建一个tag在当前commit
$ git tag [tag] [commit]
# 新建一个tag在指定commit
$ git show [tag]
# 查看tag信息
$ git push [remote] [tag]
# 提交指定tag
$ git push [remote] --tags
# 提交所有tag
$ git checkout -b [branch] [tag]
# 新建一个分支,指向某个tag
分支的操作
因为 git 是分散式的,开发过程中会有过个分支。在这类的开发中,往往同时存在多个最新代码状态。从master分支中创建多个其他分支,进行开发。master是git默认的分支,基本上所有的开发都是一个这个分支为中心进行开发的。
不同分支可以完成不同的作业,完成以后再和master分支合并,利用分支可以提高开发效率
特性分支
顾名思义,是集中实现单一特性(主题),除此之外不进行任何作业的分支,在日常开发中,往往会创建数个特性分支,同时在此之外,在保留一个随时可以发布软件的稳定分支,稳定分支的角色通常由mastre分支担任。
我们之前创建了feature-A分支,这一分支主要实现feature-A ,除feature-A的功能之外,不进行任何作业。即使开发中发现bug,也需要再创建新分支,在新分支中修正。
完成feature-A的功能以后,在合并到master分支中
查看分支状态
$ git branch
# * master 只有master一个分支
创建分支,并转到分支
$ git branch 分支名字 #创建分支
$ git checkout 分支名字 #切换到分支
$ git checkout master #切换到master分支
一句话搞定上面两个命令
$ git checkout -b 分支名称 # 创建b分支,并切换到b
当切换到其他分支的时候,所有的 add commit 操作都是在这个分支里进行的。当前的文件也是在次分支的状态。这个时候如果切换到master分支,在master分支中修改文件,在feature-A 分支文件中是看不到的。但是需要注意的时,有可能会产生冲突。
切换到上一分支(快速切换)
$ git check -
合并分支
一般合并分支,首先要切换到master分支,然后在master分支中合并想要合并的分支
$ git merge --no-ff feature-A
# --no-ff:不使用fast-forward方式合并,保留分支的commit历史
# --squash:使用squash方式合并,把多次分支commit历史压缩为一次
合并的时候如果出现冲突,就解决冲突。删除==== >>>>>>>> <<<<<<<
这样的标记,然后执行 git add .
和 git commit
就可以了。
更改提交操作
回滚历史版本
$ git reset --hard 哈希值(前七位即可)
# 哈希值可以用个git log 和 git reflog获取
修改上一个提交信息
$ git commit --amend
书的58-63页,后面的目前还不知道什么时候使用,暂且不看,等以后用到再看,暂且几下
git rebase -i 压缩历史
推送到远程仓库
上面所有的操作都是在本地仓库中进行的操作
接下来扩展到远程仓库
- 首先在github中 新创建 一个仓库。然后拿到仓库的地址
- 通过该地址,为本地仓库添加远程仓库
查看远程仓库
$ git remote
# 查看远程仓库
# origin
$ git remote -v
# 查看所有远程仓库
# origin git@github.com:github/git-reference.git (fetch)
# origin git@github.com:github/git-reference.git (push)
添加远程仓库
$ git remote add origin 远程仓库地址
移除远程仓库
$ git remote rm origin
推送至远程仓库
$ git push -u origin master # 推送主分支
$ git push -u origin feature-A # 推送feature-A分支到同一个仓库
推送远程仓库以后,在提交新的代码皆可以直接使用
$ git push
从仓库中获取
$ git clone 仓库地址
$ git pull 从仓库中拿到最新的代码
修改远程地址
$ git clone 仓库地址
$ git pull 从仓库中拿到最新的代码