git是一种分布式版本控制系统。
分布式版本控制系统(Distributed Version Control System
,简称 DVCS
)。 在这类系统中,像 Git
、Mercurial
、Bazaar
以及 Darcs
等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
官方版本可以在 Git
官方网站下载。
打开 https://git-scm.com/download/win
,然后选择相应的版本即可。
选择一个合适的地方创建一个空目录
git init
瞬间 Git
就把仓库建好了,而且告诉你是一个空的仓库(empty Git
repository),同时在当前目录下多了一个.git
的目录,这个目录是 Git
来跟踪管理版本库的,如果你没有看到 .git 目录,那是因为这个目录默认是隐藏的,用ls -ah
命令就可以看到了。
git clone
git clone https://gitcode.net/codechina/help-docs
也可以自定义本地仓库的名字
git clone https://gitcode.net/codechina/help-docs mydocs
新建readme.txt
第一步,用命令git add
告诉 Git
,把文件添加到仓库:
git add readme.txt
执行上面的命令,没有任何显示,说明添加成功。
第二步,用命令git commit
告诉 Git
,把文件提交到仓库:
git commit -m "wrote a readme file"
这里简单解释一下
git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
也可以一次提交多个文件
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
git status
命令可以让我们时刻掌握仓库当前的状态
git status
git diff
这个命令查看相较于上一次暂存都修改了些什么内容
git diff readme.txt
提交修改和提交新文件是一样的两步
(1)git add
git add readme.txt
(2)git commit
git commit -m "add distributed"
假设我们需要将 readme.txt
回退到上一个版本,也就是 wrote a readme file
的这个版本,我们需要怎么操作呢?
首先,Git 必须知道当前版本是哪个版本,在 Git 中,用**HEAD
表示当前版本**,也就是最新的提交e55063a
,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
git reset
git reset --hard HEAD^
假如你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
当你用git reset --hard HEAD^
回退到wrote a readme file
版本时,再想恢复到add distributed
,就可以通过git reflog
命令找到add distributed
的commit id
。
git reflog
git reflog
50ed06b (HEAD -> master) HEAD@{0}: reset: moving to HEAD~
e55063a HEAD@{1}: reset: moving to HEAD
e55063a HEAD@{2}: commit: add distributed
50ed06b (HEAD -> master) HEAD@{3}: commit (initial): wrote a readme file
ESC
从上面的输出可以看到,add distributed
的commit id
是e55063a
,现在,我们就可以通过 git reset --hard e55063a
切换到最新的版本上了。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
git log --pretty=oneline
git log --pretty=oneline
e55063ad7f97dd979e4f94e12d2bc44a25a0fd55 (HEAD -> master) add distributed
50ed06bd62fd34afbe501e6f2a4af73ccbe187f0 wrote a readme file
(END)
Git 和其他版本控制系统如 SVN 的一个不同之处就是有暂存区的概念。
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
工作区有一个隐藏目录.git
,这个不算工作区,而是 Git 的版本库。
Git 的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)
的暂存区,还有 Git 为我们自动创建的第一个分支master,以及指向 master
的一个指针叫HEAD
。
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
git commit --amend
git commit --amend
如果你并不想保留对 readme.txt
文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)
git checkout -- readme.txt
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:(rm删除的是工作区的文件,也就是你本地的文件)
rm test.txt
Git知道你删除了文件,因此,工作区和版本库就不一致了
如果要从版本库中删除文件
(1)git rm
或者git add
(2)git commit -m "remove test.txt"
如果是删错了文件,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:(还原版本库)
git checkout -- test.txt