1、Git是什么?

Git是目前世界上最先进的分布式版本控制系统。

2、安装Git

2.1 在Linux上安装Git

sudo apt-get install git

2.2 在Mac OS X上安装Git

直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

2.3 在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

https://git-scm.com/downloads

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

3、版本库

版本库又名仓库(repository),这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪。

3.1 创建一个空文件夹

pwd/cd/mkdir/cat 等操作命令和 Linux 命令一样:

# 进入D盘soft文件夹
cd /d/soft
# 在soft文件夹下创建git空文件夹
mkdir git
# 进入新创建的git文件夹
cd /d/soft/git
# 查看该文件夹
pwd

Windows系统目录名(包括父目录)不包含中文。

3.2 将文件夹变成Git仓库

git init

创建完成,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的。

3.3 添加文件

工作中,我们将文件放在 git 文件夹中即可,如添加一个readme.txt。

3.3.1 将文件添加到 stage 暂存区

git add readme.txt
# 将文件添加到stage暂存区

3.3.2 将stage暂存区文件添加到commit当前分支

git commit -m"本次提交的说明"
# 将stage暂存区文件添加到commit当前分支

总结:

初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add <file>,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>,完成。

4、修改及提交文件

4.1 修改文件及查看

将工作文件 readme.txt 修改后,用 git status 查看,git status 命令可以让我们时刻掌握仓库当前的状态。

git status
# 查看工作文件与暂存区文件有不同

git diff这个命令查看不同之处:

git diff
# 工作区与暂存区的区别

4.2 修改文件再次提交

git add readme.txt
# 再次提交修改的文件

可以随时运行git status看看当前仓库的状态;

git commit -m "再次提交的说明"
# 再次提交commit

总结:

要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

5、回退版本

5.1 查看历史版本

当我们多次使用提交了修改版本:

git add readme.txt
git commit -m "第N次修改说明"

就会在生成多个版本快照,可以用 git log 命令查看:

git log
# 查看所有提交版本

也可以使用以下命令 --pretty=oneline 查看简洁版:

git log --pretty=oneline

看到的一大串类似1094adb... 的是 commit id(版本号)

5.2 退回历史版本

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,再往上就是HEAD~100

我们要把当前版本回退到上一个版本,就可以使用 git reset 命令:

git reset --hard HEAD^
# HEAD^ 退回到上一个版本

如果想退回到某一个固定的版本,只需使用 git log 查看版本 commit id 版本号即可:

git reset --hard 109456
# 恢复到某一版本,使用版本号 commit id 即可

如果想退回已经删除的版本:

Git提供了一个命令 git reflog 用来记录你的每一次命令:

git reflog
# 记录了每次动作的历史记录

我们只需要将删除版本的 commit id 找到,再可以继续使用 git reset 来恢复。

git reset --hard 109456
# 恢复到某一版本,使用版本号 commit id 即可

总结:

1、HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
2、穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
3、要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

6、工作区、暂存区

6.1 工作区(Working Directory)

工作区就是我们编辑代码的地方,如前面创建的 git 文件夹。

6.2 版本库(Repository)

工作区有一个隐藏目录 .git,这个不算工作区,而是Git的版本库。

第一步git add 命令实际上就是把要提交的所有修改放到暂存区(Stage);

Git 笔记 (一)-半竹博客

第二步,执行 git commit 就可以一次性把暂存区的所有修改提交到分支(master)。

Git 笔记 (一)-半竹博客

7、撤销 与 修改

7.1 修改与提交

查看工作区和版本库里面最新版本的区别:

git diff HEAD -- readme.txt
# HEAD表示最新版,readme.txt表示工作区的文件;

我们将工作区第一次修改,git add,第二次修改,git commit

那么,第二次修改不会被提交,因为 git commit 提交的是第一次 git add 的修改,而第二次修改没有被提交。

so,所有工作区的修改,应该全部 git add 之后,再 git commit

7.2 撤销修改

7.2.1 工作区需撤销,未提交

Git会告诉你,git checkout -- file 可以丢弃工作区的修改:

git checkout -- readme.txt
# 把readme.txt文件在工作区的修改全部撤销。

7.2.2 已经 git add 的内容需撤销

git status 查看一下,修改只是添加到了暂存区,还没有提交 git commit

git status

命令 git reset HEAD <file> 可以把暂存区的修改撤销掉(unstage),重新放回工作区:

git reset HEAD readme.txt
# git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

7.2.3 已经从暂存区提交到版本库的内容需撤销

使用5.2的方法,退回到之前的版本:

git reset --hard HEAD^
# HEAD^ 退回到上一个版本

git reset --hard 109456
# 恢复到某一版本,使用版本号 commit id 即可

8、删除

8.1 正常删除

删除工作区中的 readme.txt 文件:

rm test.txt
# 也可手动删除

使用 git status 命令会提示工作区文件已经删除了;

用命令 git rm 删掉:

git rm test.txt
# 删除文件;

并且 git commit

git commit -m "删除说明"
# 删除后 git commit

8.2 误删需恢复

如果是删错了,可以从版本库中重新提取:

git checkout -- readme.txt
# 将版本库版本替换工作区版本

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