$ git init # 初始化一个Git仓库
# 将文件添加到Git仓库
$ git add <file>
$ git commit -m "说明内容"
$ git status # 时刻掌握仓库当前的状态
$ git diff <filename> # 可以查看到具体修改了哪些内容
利用 add, commit, status, diff命令可以轻松的修改文件并且合入到版本仓库中,并且查看具体修改了哪些内容。引用廖雪峰老师的一段话:
你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
$ git log # 查看最近到最远时间的提交日志的信息
$ git log --pretty=oneline # 可以简介表示日志信息
git log 命令可以查看提交的历史记录,以便确定要回到哪个版本
# HEAD 表示当前版本
$ git reset --hard HEAD^ # 回退到上一版本
$ git reset --hard HEAD^^ # 回退到上上版本
$ git reset --hard HEAD~100 # 回退到前100个版本
$ git reset --hard commit ID # 回退到指定的commit ID的版本
$ git reflog # 记录每一次命令
git reflog 可以查看历史命令,以便确定要回到未来的哪个版本
# 撤销修改
# 场景1. 当在工作区修改了文件记录,没有add和commit时:
$ git checkout --file # 丢弃工作区的修改,回到上次保存时候的样子,实际上就是把暂存区的最新版本恢复到工作区;
# 场景2. 当在工作区修改了文件记录,并且add到了暂存区之后:
$ git reset HEAD file # 撤销保存到暂存区的修改记录,但是工作区仍然是有修改记录;
$ git checkout --file # 丢弃工作区的修改,回到上次保存时候的样子;
# 场景3. 当在工作区修改了文件记录,并且执行了add和commit时...:
# 这时需要回退版本了
$ git reset --hard HEAD^ 回到上一个版本
# 删除文件
$ rm file # 在工作区把文件删除
# 因为暂存区还有文件记录,这时可以有两种操作:1.删除暂存区的记录;2.从暂存区恢复文件到工作区;
# 1. 删除暂存区的记录
$ git rm file
$ git commit -m "delete file"
# 2. 从暂存区中恢复文件到工作区
$ git checkout -- file
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
# 添加远程仓库
# 前提条件是在本地的公钥上传到了你的Github账户中
$ git remote add origin git@server-name:path/repo-name.git
# 如 git remote add origin https://github.com/misterbobo/learngit.git
# 关联之后
$ git push -u origin master # 第一次推送master分支的所有内容
$ git push origin master # 推送最新的修改
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
# 从远程仓库克隆
$ git clone https://github.com/misterbobo/gitskills.git
如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。
GitHub给出的地址不止一个。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。