《Git 文件操作和历史回退》要点:
本文介绍了Git 文件操作和历史回退,希望对您有用。如果有疑问,可以联系我们。
创立新文件夹:mkdir learngit
进入:cd learngit
ls
发现没有任何东西:git init
将这个文件夹设置为git文件夹.目录下面会出现.git 的暗藏文件
当移入/创建新的文件和文件夹时,必要git add file
然后,git commit -m 阐明
将文件提交到当前分支.执行命令前后的区别,可以通过git status
来查看.
当修改文件内容的时候,调用git status
会发现modified:,阐明没有提交到当前分支.
此时,可以git diff 改动的文件名
,来查看文件哪里进行了改动.
当然,最后还是必要先git add file
,再git commit -m 说明
一下.
查看git status
的成果的最后应该是:working directory clean
git log
:可以查看最近到最远的提交日志.如果嫌输出信息太多,看得眼花缭乱的,可以尝尝加上--pretty=oneline参数,使用git log --pretty=oneline
需要友情提示的是,你看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你本身的为准.为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了.
git reset --hard 一段commit_id的缩写
:重回对应的版本,不必要全部的commit_id,只要前几位可以区分就行.嫌麻烦的话,可以git reset --hard HEAD~num
,例如 git reset --hard HEAD~100
回退到前100个版本.
git checkout -- file
:如果只是想在没有commit
提交之前撤销修改,这条命名会让文件撤销修改.
注意,必需有 -- ,否则就是切换分支了.
如果手动删除了文件/敕令行rm file
删除了文件
git rm file
,然后再git commit -m "..."
提交到版本库git checkout -- file
恢复即可.Git和其他版本控制系统如SVN的一个不同之处便是有暂存区的概念.
先来看名词解释.
就是你在电脑里能看到的目录,好比我的learngit
文件夹就是一个工作区:
工作区有一个暗藏目录.git
,这个不算工作区,而是Git的版本库.
Git的版本库里存了很多东西,其中最重要的便是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
.
分支和HEAD
的观点我们以后再讲.
前面讲了我们把文件往Git版本库里添加的时刻,是分两步执行的:
第一步是用git add
把文件添加进去,实际上便是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上便是把暂存区的所有内容提交到当前分支.
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
便是往master
分支上提交更改.
你可以简单理解为,必要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改.
俗话说,实践出真知.现在,我们再练习一遍,先对readme.txt
做个修改,好比加上一行内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
然后,在事情区新增一个LICENSE
文本文件(内容随便写).
先用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
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# LICENSE
no changes added to commit (use "git add" and/or "git commit -a")
Git异常清楚地告诉我们,readme.txt
被修改了,而LICENSE
还从来没有被添加过,所以它的状态是Untracked
.
现在,使用两次敕令git add
,把readme.txt
和LICENSE
都添加后,用git status
再查看一下:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: LICENSE
# modified: readme.txt
#
现在,暂存区的状态就酿成这样了:
所以,git add
命令实际上便是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支.
$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works
2 files changed, 675 insertions(+)
create mode 100644 LICENSE
一旦提交后,如果你又没有对工作区做任何修改,那么工作区便是“干净”的:
$ git status
# On branch master
nothing to commit (working directory clean)
现在版本库酿成了这样,暂存区就没有任何内容了:
暂存区是Git异常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么.
没弄明确暂存区是怎么回事的童鞋,请向上滚动页面,再看一次.
更多 Git 教程系列文章:
GitHub 使用教程图文详解 http://www.linuxidc.com/Linux/2014-09/106230.htm
Git使用图文具体教程 http://www.linuxidc.com/Linux/2016-11/136781.htm
Ubuntu Git安装与使用 http://www.linuxidc.com/Linux/2016-11/136769.htm
Git 标签治理详解 http://www.linuxidc.com/Linux/2014-09/106231.htm
Git 分支治理详解 http://www.linuxidc.com/Linux/2014-09/106232.htm
Git 长途仓库详解 http://www.linuxidc.com/Linux/2014-09/106233.htm
Git 当地仓库(Repository)详解 http://www.linuxidc.com/Linux/2014-09/106234.htm
Git 服务器搭建与客户端安装 http://www.linuxidc.com/Linux/2014-05/101830.htm
Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm
分享适用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm
Git从入门到学会 http://www.linuxidc.com/Linux/2016-10/135872.htm
Git根本操作详解 http://www.linuxidc.com/Linux/2016-10/135691.htm
Git部署与常用根本命令详解 http://www.linuxidc.com/Linux/2017-06/144961.htm
散布式版本控制系统 Git 详细教程 http://www.linuxidc.com/Linux/2017-05/143747.htm
Git 的详细先容:请点这里
Git 的下载地址:请点这里
本文永远更新链接地址:http://www.linuxidc.com/Linux/2017-06/145144.htm
更多LINUX教程,尽在维易PHP学院专栏。欢迎交流《Git 文件操作和历史回退》!