git学习2:版本库
创建版本库
版本库,又称仓库,英文名为repository,版本库内的所有文件都可以被Git管理起来,即每个文件的修改、删除,Git都能跟踪。
1,在目录中创建版本库
在目录中有两种创建版本库的方法,
一是使用Bash命令行工具,即打开Bash环境直接进入该目录中,然后使用$ git init,
比如在目录中创建版本库,方法如下
在git命令行中输入:
$ cd learngit
$ git init
二是可以在合适的目录中使用鼠标右键的Git init here,采用鼠标右键这种方法的前提是安装过程中,勾选Simple contextmenu选项。如下图
Git仓库建好了,同时在当前目录下多了一个.git目录,这个用来跟踪管理版本库,千万不要删除
如果你没有看到.git
目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见。
注意:如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
本文使用命令行模式,如图
把文件添加到版本库:
注意:所有的版本控制系统,都只能跟踪文本文件的改动,比如txt,网页,程序代码等,而无法跟踪图片,视频,等这些二进制文件的变化。同时微软的word格式是二进制文件,所以,最好使用纯文本方式编写文件,
强烈建议使用标准的UTF-8编码,建议你下载Notepad++代替记事本!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:
创建RinA01.R文件,并放到MyRScripts目录下,
1,用命令git add把文件添加到仓库,
$ git add
RinA01.R
如果一次添加多个文件,可以使用git add .或者gitadd -A(推荐)
git add -A:
它能stages所有文件,
git add .:
只能stages新文件和被修改文件,没有被删除文件
2,用命令git commit把文件提交到仓库
$ git commit -m "the first chapter code of the book",如图所示,
解释:-m参数表示后面输入本次提交的说明,最好有意义
打开RinA01.R
文件,在第四行添加以下内容:
# time 2016/3/27
运行git status命令,得到结果如下
git status可以时刻掌握仓库的当前状态,表明,文件被修改过了,但是没有提交的修改
使用git diff查看修改内容:
git diff RinA01.R
结果如图,
知道了修改内容后,就可以提交到仓库了,
git add RinA01.R
git commit -m 'add distributed'
git status
如图所示:
继续对RinA01.R做修改,比如,在第五行添加如下内容:
# author:Nick
然后使用git add和git commit提交到仓库。
文件经过很多次修改,git对每次commit进行记录,当文件改乱或者文件误删,都可以从最近的一次commit恢复。
使用命令git log可以查看文件历史修改记录。显示从最近到最远的提交日志,
得到的日志信息中,commit后的数字是commit的版本号,如图所示:
版本回退:
Git的每次commit都相当于保存一个快照,
一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit
恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
Git中,用HEAD表示当前版本,其对应一个版本号,上一个版本就是HEAD^,上上个版本是HEAD^^,第20个版本是HEAD~20。
使用命令git reset回退到上一个版本:
git reset --hard HEAD^
此时用git log,已经看不到add author的版本了,
要想回到add author版本,
1,可以使用
git reset --hard 版本号
版本号只需要完整版本号的前几位即可,
此时打开RinA01.R文件,可以看到文件恢复到最初的版本了。
如果完全忘记了版本号怎么办?
2,可以使用
git reflog
记录每次命令的信息,有版本号。
工作区Working Directory,比如MyRScripts文件夹就是一个工作区
版本库 Repository,工作区有一个隐藏目录.git,是git的版本库,其中存了很多文件,其中最重要的是称为暂存区的stage,还有git自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
文件的添加和提交的执行过程是:
1,git add,实际是把文件修改添加到暂存区
2,git commit,实际是把暂存区的所有内容提交到当前分支
开始时,git自动创建了唯一一个分支master,所以git commit就是往master分支上提交修改。
每次已修改只有通过git add添加到暂存区,然后经git commit才能把暂存区的所有修改提交。
git checkout --filename
可以丢弃工作区的修改
1,文件修改后还没有被放到暂存区,撤销修改就回到了版本库一样的状态
2,文件已经添加到暂存区,又做了修改,撤销修改回到添加暂存区后的状态
总之,就是让文件回到最近一次的git add或git commit时的状态。
如果文件修改已经添加到暂存区,可以用
git reset HEAD filename
把暂存区的修改全部撤销,重新回到工作区。
删除文件:
在Git中,删除文件也是一种修改操作,
要删除一个文件可以用
rm filename或者使用鼠标菜单删除
然后提交 git commit,这样文件就从版本库中删除了。
若是删错了,使用
git checkout-- filename
其实使用版本库的版本替代工作区的版本,无论工作区是修改还是删除,都可以一键还原