安装
windows版的git,下载
安装完成后设置全局参数
$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"
创建版本库
选择一个合适的地方创建本地版本库(路径不要包含中文),pwd
命令用于显示当前目录
$ cd /d/Tools/Repositories/gitReposiroty
$ mkdir learngit
$ cd learngit
$ pwd
/d/Tools/Repository/learngit
通过git init
命令把这个目录变成git可以管理的仓库
$ git init
Initialized empty Git repository in D:/Tools/Repositories/gitRepository/learngit/.git/
完成后会在当前目录下创建一个.git
目录,默认隐藏,建议不要手动修改此文件,以免破坏仓库。
提交文件
至此git版本库已经创建好,建议为每个版本库创建一个readme文件,不要使用windows系统自带的记事本,因为它会在每个UTF-8编码的文件开头默认加一个0xefbbbf(十六进制)的字符,使用Notepad++时,编码设置为UTF-8 without BOM
添加文件到git版本库需要两步,先添加文件到暂存区git add <filename>
,然后提交到分支git commit -m "comment"
,-m
后面是提交的说明注释,可以多次添加,一次性提交,在add和commit后,分别执行git status
命令,可以查看仓库当前的状态。
$ git add readme.txt
$ git commit -m "add a readme file"
[master (root-commit) abb5369] add a readme
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
版本的修改
工作原理
工作区—-add—->>版本库.stage—-commit—->>版本库.branch<<—-HEAD
git diff #是工作区(work dict)和暂存区(stage)的比较
git diff --cached #是暂存区(stage)和分支(master)的比较
git diff HEAD #查看工作区和版本库里面最新版本的区别
查看版本
当我们多次提交到仓库,我们可以通过git log
查看提交的版本记录,包括版本号、作者、日期、注释说明
$ git log
commit 2621e3c4bd39d1fa65bc06991e3b77e2ac131f31
Author: Echo <oldechochuan@gmail.com>
Date: Sat Jun 10 15:27:43 2017 +0800
modify
commit abb5369a3a0a8779c05e069d49e594ece81c14d7
Author: Echo <oldechochuan@gmail.com>
Date: Sat Jun 10 15:23:10 2017 +0800
add a readme
而git log --pretty=oneline
只显示版本号、注释说明
$ git log --pretty=oneline
2621e3c4bd39d1fa65bc06991e3b77e2ac131f31 modify
abb5369a3a0a8779c05e069d49e594ece81c14d7 add a readme
退回版本
git中使用HEAD
表示当前版本,上一个版本HEAD^
,上上个版本HEAD^^
,前100个版本HEAD~100
退回到上一个版本
$ git reset --hard HEAD^
查看文件内容
$ cat readme.txt
查看使用过的命令
$ git relog
通过这条命令可以看到各版本号,如果我们从版本3退回到版本2,现在想要再恢复到版本3,git log
命令则不能查看版本3的版本号,我们就可以使用git relog
撤销修改
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
$ git reset HEAD readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
删除文件
删除也应当看成是修改操作
现在的情况是:工作区中的文件被我们删除了,但是版本库中还存在,我们可能面临两种选择
将版本库中的文件也删除
$ git rm test.txt $ git commit -m "remove test.txt"
误操作,需要从版本库中将文件恢复到工作区中
$ git checkout -- test.txt
远程仓库
远程仓库关联本机
我们使用GitHub作为远程仓库
生成SSH key
$ ssh-keygen -t rsa -C "youremail@example.com"
将SSH公钥添加到GitHub账号中
只有在GitHub账号中添加了本地SSH公钥才能向仓库中推送文件
添加远程仓库
在码云上创建一个名为learngit的空的仓库,然后连接到该仓库
$ git remote add origin git@git.oschina.net:oldEchoChuaN/learngit.git
使用git push
命令将本地当前分支master
推送到远程
$ git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
此后本地再做提交,可以通过命令
$ git push origin master
SSH警告
第一次使用Git的clone
或者push
命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes
回车即可,此后就不会再次出现。
从远成仓库克隆
当已经有人讲项目基础推送在远程仓库上,而我们本地应该是从零开始,则使用git clone
命令从远程获取
$ git clone git@git.oschina.net:oldEchoChuaN/learngit.git