Git学习与使用2-版本库创建修改回退

一.版本库创建与修改
1.创建版本库
首先创建一个空目录,并且确保目录名不包含中文,例learngit:

$ cd learngit          
$ pwd      //该命令用于显示当前目录

通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in F:/learngit/.git/

这时一个版本库就创建好了,会发现多了一个.git的目录,这个目录是用来追踪管理版本库的,千万不要手动修改里面文件。
把文件添加到版本库,我们在git目录下编写一个readme.txt文件,内容如下:

1.Git is a version control system;
2.Git is free software;

然后用命令git add把文件添加到仓库:

$ git add readme.txt

接着用命令git commit把文件提交到仓库:

$ git commit -m "wrote a readme file"

-m是本次提交的说明,最好有意义以后方便查找改动记录,commit可以一次提交多个文件,所以可以多次add不同文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

2.修改文件
我们已经成功添加并提交了一个readme.txt文件,继续修改文件:

it is a distributed version control system.
Git is free software.

运行git status命令查看结果:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库的状态,上面命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
虽然Git告诉我们readme.txt文件被修改了,但是我们还可以用命令查看具体修改了什么:

$ git diff readme.txt      //diff意为difference

之后提交修改和提交新文件是一样两步:

$ git add readme.txt

在执行提交之前,我们再用git status查看一下当前仓库的状态:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master 6a8ab3a] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交之后,我们再用git status查看一下仓库的当前状态:

$ git status
On branch master
nothing to commit, working directory clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。

3.版本回退
现在我们已经学会了修改文件,现在再修改readme.txt文件:

Git is a distributed version control system.
Git is free software distributed under the GPL.

然后尝试提交:

$ git add readme.txt
$ git commit -m "append GPL"

现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file

Git is a version control system.
Git is free software.

版本2:add distributed

Git is a distributed version control system.
Git is free software.

版本3:append GPL

Git is a distributed version control system.
Git is free software distributed under the GPL.

但是在实际工作中,我们不可能记得一个几千行的文件每次都改了什么内容,但是在Git中我们可以用命令git log来查看历史记录:

$ git log
commit f1c6504b3a4a686c26743b75a41e063d98d02c8e
Author: zhangyan <32030155+yannercode@users.noreply.github.com>
Date:   Wed Jan 24 15:52:18 2018 +0800

    append GPL

commit 6a8ab3afe775b79939ccd368429e19d8d5c489aa
Author: zhangyan <32030155+yannercode@users.noreply.github.com>
Date:   Wed Jan 24 11:32:45 2018 +0800

    add distributed

commit 9733f81546b902c769e922011e86a562aaebc8aa
Author: zhangyan <32030155+yannercode@users.noreply.github.com>
Date:   Wed Jan 24 10:54:06 2018 +0800

    wrote a readme file

如果嫌输出信息太多,我们可以加参数查看:

$ git log --pretty=oneline

现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at 6a8ab3a add distributed

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^。
然后我们查看一下readme.txt文件的内容是不是add distributed:

$ cat readme.txt
Git is a distributed version control system.
Git is a free software.

如果我们想回到上个append GPL版本怎么办,我们可以用版本号指定回到某个版本:

$ git reset --hard f1c6504
HEAD is now at f1c6504 append GPL

但是如果找不到版本号怎么办,Git提供了一个git reflog来记录每一次的命令版本号:

$ git reflog
f1c6504 HEAD@{0}: reset: moving to f1c6504
6a8ab3a HEAD@{1}: reset: moving to HEAD^
f1c6504 HEAD@{2}: commit: append GPL
6a8ab3a HEAD@{3}: commit: add distributed
9733f81 HEAD@{4}: commit (initial): wrote a readme file

于是我们可以看到append GPL的版本号为:f1c6504.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值