跟廖雪峰学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教程相关文章推荐
- git基本操作
- Git学习笔记(3)--Git的基本操作及一些小技巧
- 一、git基本常用操作
- Git基本操作
- Git学习笔记(一)Git初识及基本操作
- 4.22 初始git,git基本操作 -使用git入门新手
- Git基本概念及操作(1)
- Git基本操作
- Linux下git操作(一)——git基本命令
- git 基本操作
- git 笔记记录(七) git基本操作
- Git操作基本命令
- git基本操作(二)
- Windows下 Git 的基本操作
- Git学习系列之Git基本操作提交项目(图文详解)
- Git和Github的基本操作
- git基本操作总结
- Git基本命令行操作 (转)
- git基本操作
- git使用手册(二)基本命令操作