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