您的位置:首页 > 其它

跟廖雪峰学Git 二 —— 基本操作

2017-11-24 22:20 197 查看

一、查看仓库状态

使用
git status
命令查看当前仓库状态。

接下来我们操作测试一下。

首先,修改
GitSpace
目录下的
readme.txt
文件,在原有内容下,加入一句:

Git status handler.


保存后,关闭编辑器。然后在
git bash
中输入
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")


返回的信息告诉我们
readme.txt
文件被修改过了。

然后如果相知道修改的详细内容,可以用
git diff
命令查看。

$ git diff
diff --git a/readme.txt b/readme.txt
index 9f7547c..082f801 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@
Git is a version control system.
-Git is free software.
\ No newline at end of file
+Git is free software.
+
+Git status handler.
\ No newline at end of file


返回的详细信息为
readme.txt
文件新增了一行空的 line,和一句

Git status handler。


之后,我们再把修改过的内容提交。

提交的命令我们之前操作过:

$ git add readme.txt

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

modified:   readme.txt

$ git commit -m "modify readme.txt"
[master 6f06d48] modify readme.txt
1 file changed, 3 insertions(+), 1 deletion(-)

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


add readme.txt
文件,然后运行
git status
命令,看到仓库信息为:将要提交修改的
readme.txt
文件。最后提交。再次运行
git status
命令,就显示没有内容待提交,此时工作目录是干净的(working tree clean)。

二、版本回退

在开发中,我们肯定会遇到这样的问题。出现了错误代码的提交要回退到某个指定的代码版本,然后在正确版本的代码上去规避问题。

那我们怎么知道要具体回退到哪一个版本呢?或者我们怎么能记得住哪个版本我们提交了哪些内容呢?

当然,我所提的这肯定不算啥大问题,所有的代码版本控制系统完成这件事都是小菜一碟。

在 Git 中,我们可以使用
git log
命令查看我们提交代码的历史记录:

$ git log
commit 6f06d487836765e507bc20a69d9740b048191fdf (HEAD -> master)
Author: gink <wang_gk@foxm
c682
ail.com>
Date:   Fri Nov 24 10:28:30 2017 +0800

modify readme.txt

commit 4ab5b56ea7ee19c5e7948e004cf37b74b5a4c1ef
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:55:51 2017 +0800

add newfiles

commit f4625e13ea1076da03dc32f66b6ad0f4c651a26c
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:52:25 2017 +0800

add readme file


使用
git log
命令可以查看最近三次提交记录,显示序列由近到远。如果嫌显示的内容太过繁杂,可以加上
--pretty=oneline
参数:

$ git log --pretty=oneline
6f06d487836765e507bc20a69d9740b048191fdf (HEAD -> master) modify readme.txt
4ab5b56ea7ee19c5e7948e004cf37b74b5a4c1ef add newfiles
f4625e13ea1076da03dc32f66b6ad0f4c651a26c add readme file


在 Git 中,用
HEAD
表示当前版本,上一个版本用
HEAD^
表示,上两个版本用
HEAD^^
表示。如果往上的版本太多,比如上100个版本,那就用
HEAD~100
表示。

然后你看到的一长串字符串是每次提交的版本号(commit id),如果想要进行回退,就要用到这些版本号。

注:需要注明的是,Git 和SVN不一样,Git的
commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的
commit id
和我的肯定不一样,以你自己的为准。为什么
commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

好了,现在开始吃后悔药,进行版本回退吧。

版本回退可以使用
git reset
命令,我们试一下,将版本回退到
add newfiles
版本。

$ git reset --hard HEAD^
HEAD is now at 4ab5b56 add newfiles

$ git log
commit 4ab5b56ea7ee19c5e7948e004cf37b74b5a4c1ef (HEAD -> master)
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:55:51 2017 +0800

add newfiles

commit f4625e13ea1076da03dc32f66b6ad0f4c651a26c
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:52:25 2017 +0800

add readme file


OK,现在已经把版本回退到了
add newfiles
版本。原来的
modify readme.txt
已经找不到了。那现在想再把
modify readme.txt
版本还原回来怎么办?

可以,只要你找到
modify readme.txt
的版本号。拿到版本号之后,运行命令:

$ git reset --hard 6f06d48783
HEAD is now at 6f06d48 modify readme.txt

$ git log
commit 6f06d487836765e507bc20a69d9740b048191fdf (HEAD -> master)
Author: gink <wang_gk@foxmail.com>
Date:   Fri Nov 24 10:28:30 2017 +0800

modify readme.txt

commit 4ab5b56ea7ee19c5e7948e004cf37b74b5a4c1ef
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:55:51 2017 +0800

add newfiles

commit f4625e13ea1076da03dc32f66b6ad0f4c651a26c
Author: gink <wang_gk@foxmail.com>
Date:   Thu Nov 23 16:52:25 2017 +0800

add readme file


注:版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

三、工作区和暂存区

直接上结论:

工作区:就是在电脑上能看到的目录。比如 GitSpace 文件夹。

暂存区:
git add
的操作就是把需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改

四、管理修改

管理修改是 Git 有别于也是优于别的版本控制系统的特点。

为什么说Git管理的是修改,而不是文件呢?我们还是在代码中看。

还是打开
readme.txt
,在最后加一行内容:

Git modify


然后,将本次修改添加到暂存区:

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

modified:   readme.txt


然后,先不提交,再去修改 readme.txt :

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

Git status handler.
Git modify on file.


然后,再去提交:

$ git commit -m "git change"
[master d0d8cc4] git change
1 file changed, 2 insertions(+), 1 deletion(-)

$ 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 至管理修改的特点了。因为我们只把第一次的修改添加到暂存区了,第二次的修改没有添加进去,自然就提交不上。

想要把第二次修改,可以继续
git add
git commit
,也可以别着急提交第一次修改,先
git add
第二次修改,再
git commit
,就相当于把两次修改合并后一块提交了。

五、撤销以及修改

有时候我们会不小心手抖写错了一些文档或者写了错误的代码。这时,我们通常的做法都是删除错误的书写,让文件恢复到上一个版本的状态。这时候输入
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 会告诉你,可以使用
git checkout -- file
命令来丢弃工作区的修改。

$ git checkout -- readme.txt


命令
git checkout -- readme.txt
意思就是,把
readme.txt
文件在工作区的修改全部撤销,这里有两种情况:

一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次
git commit
git add
时的状态。

在工作目录中,如果你手动或者使用
rm
命令删除一个文件之后,运行
git status
会看到 Git 中有删除记录。

这时候你有两个选择,一个是使用
git rm
命令将文件删除,并且
git commit


这样,文件就彻底从版本库中删除了。

另一种情况就是,你又想吃后悔药了。想还原已经删除的文件。

此时,运行:

$ git checkout -- 删除的文档名


就可以从版本库中还原已经删除的文件。

git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

参考

Git教程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: