git简介
安装git
Windows下安装git https://git-scm.com/downloads
安装完成后会出现一个Git Bash,点击GIt Bash弹出窗口表示安装成功。
Linux 下安装Git 首先,你可以试着输入git,看看系统有没有安装Git:
$ git
The program ‘git’ is currently not installed. You can install it by typing:
sudo apt-get install git
像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。
然后执行命令
sudo apt-get install git
创建版本库
在合适的位置创建一个空的目录
mkdir learngit
进入到 learngit 目录下,显示当前所在目录
cd learngit
pwd
使用
git init
把该目录变成Git可以管理的目录
创建一个文本文件,一定要放到 learngit 目录下(子目录也可以)
vim readme.md
写入以下内容
Git is a version control system.
Git is free software.
第一步,用命令git add告诉Git,把文件添加到仓库:
第二步,用命令git commit告诉Git,把文件提交到仓库(打错了一个单词,尴尬):
git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
小结
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
使用命令git add ,注意,可shi’h使用,添加多个文件;
使用命令git commit -m ,完成。
时光穿梭机
修改readme.md中的内容
Git is a distributed version control system.
Git is free software.
使用git status查看状态
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
使用git diff查看具体哪些变化
gif diff readme.md
执行 git add readme.md
然后使用 git status 查看状态
然后使用 git commit -m “add distributed”
使用git status查看当前状态
小结
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
版本回退
再次修改readme.md里面的文件
git is a distributed version control system.
git is free software distributed under the GPL.
使用git add readme.md 添加到工作区
然后使用git commit -m "append GPL"进行提交
使用git log查看日志信息
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:
回退上一个版本
git reset --hard HEAD^
查看文件内容
使用git log查看信息,只有两个版本的信息了
如果想回到最新的版本
使用git reset --hard 06d73
忘记commit id可以使用git reflog查看每一次操作
小结
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
工作区和暂存区
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
我们再练习一遍,先对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非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。
现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
管理修改
对readme.md进行修改
然后git add
再次对readme.md进行修改
然后git commit进行提交
查看提交后readme.md的状态,发现第二次修改未被提交
使用git diff HEAD – readme.md
因为我们在第一次修改后执行的git add操作,将第一次修改后的文件提交到了暂存区,然后进行的第二次修改,修改完成后并没有进行git add操作,也就是说第二次修改的文件并没有提交到暂存区而且保存在工作区,然后执行git commit操作将暂存区的文件提交到分支了,所以查看到的文件是第一次修改的内容。
要想看到第二次修改的文件内容,再次执行git add和git commit命令后将可以看到了。
撤销修改
在工作区添加了一行
stupid boss
这时你发现了这个问题想要撤销这一行,可以先用git status查看状态
git 告诉你可以使用git checkout – <文件> 丢弃工作区的改动
如果你写了一行不好的代码,又将它使用git add添加到暂存区了
git 提示你使用git reset HEAD <文件>取消暂存
使用git checkout丢弃工作区的改动
文件就恢复到初始状态了。
如果你不小心将不要的文件提交到了分支,不用担心,这时你可以使用版本回退到上一个版本就好了。
先使用git log查看你要回退到的版本
然后使用
git reset --hard 74789
回退到上一个版本,查看内容
如果你将改动推送到远程版本库,你将可以准备写辞职信了,祝你好运…
小结
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
新建一个测试文件test.txt到Git并且提交
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
rm test.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
在文件中确实被删除了
如果是误删,可以使用
git checkout
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
如果你真的想删除这个文件,这时你需要先
rm test.txt
git rm test.txt
git commit -m “delete test.txt”