
1.创建版本库
mkdir learngit 创建一个名为learngit的文件夹
cd learngit 进入learngit文件夹下
pwd 用于显示当前目录
git init 把当前目录变成git可以管理的仓库
ls -ah 可以看到隐藏目录

git add readme.txt 将文件添加到仓库中
git commit -m "wrote a readme file" 将文件提交到仓库中

git status 查看当前仓库的状态
git diff 文件名 查看不同

git log 查看提交commit的历史记录

git log --pretty=oneline 查看commit的历史记录,比git log打印出的信息少点

2.版本回退
git reset --hard Head^ 回退到上一个提交的版本
cat readme.txt 查看当前文件的内容

回退之后,利用git log查看提交的历史版本,发现只有一个了,纳尼...

如果我们还想回到上一个版本,咋整...,如果我们刚刚的窗口没关,我们可以利用commit的id回退到上一个版本。
git reset --hard commit的id 利用commit的id回退到上一个版本

那么问题来了,如果我们关了窗口,是不是就查不到上一版本的commit的id,当然不是咯,还是有办法得到后悔药滴,
git reflog 获取所有commit的id

利用git reflog可以查看到,上一版本的id为2181593。
总结:
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
- 穿梭前,用git log可以查看提交历史,一遍确定回退到哪儿版本;
- 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
3.工作区和暂存区
我们上面操作的learngit文件架就是一个工作区。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库包括称为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步使用git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。
4.撤销修改
git checkout -- readme.txt 撤销工作区的修改

从上图可以看出,利用上面的命令可以看出我们可以撤销工作区的修改,那如果我们修改的内容add到了暂存区,我们该如何撤回修改呢?看下图:

从上图我们可以利用git reset HEAD 文件名命令将暂存区的修改回退到工作区,然后再利用git checkout -- readme.txt命令丢弃工作区的修改。
那么问题又来了,如果你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得上面我们说过的版本回退吗?我们回退到上一个版本就欧了。不过,这是有条件的,就是你还没有把自己的本地库推送到远程,一旦你把改错的内容推送到了远程版本库,那你就game over了...
总结:
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file;
- 场景2:当你不但改了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,需要分两步走,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作;
- 场景3:已结提交了不合适的修改到版本库时,想要撤销本次提交,参考上面的版本回退,不过前提是没有推送到远程版本库。
5.删除
一般情况下我们可以利用文件管理器吧没用的文件删了,或者用命令rm删了:

但是上面的操作只是删除了工作区的文件,版本库中的文件并没有被删掉,如果要删除版本库中的,我们需要用以下方式:
git rm test.txt 删除文件
git commit -m "remove test.txt" 提交删除的文件

如果我们删错了工作区的文件,肿么办呢?当然是有办法解决滴,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
git checkout -- test.txt
git checkout 其实是用版本库里的版本替换工作区的版本无论工作区是修改还是删除,都可以“一键还原”。
6.远程仓库
创建SSH Key:ssh-keygen -t rsa -C "邮箱地址"
创建一个远程的仓库learngit(用GitHub),在本地的learngit仓库下运行命令:
git remote add origin git@github.com:gaojuanjuan/learngit.git
注意:上面的gaojuanjuan替换成你自己的GitHub账户名。关联后,远程仓库的名字就是origin.
git push -u origin master
注:由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功之后,只要本地做了提交,就可以通过命令:
git push origin master
从远程仓库克隆
git clone git@github.com:gaojuanjuan/myApp.git
总结:
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
- 关联后使用命令git push -u origin master第一次推送master分支的所有内容;
- 此后,每次本地提交后,就可以使用git push origin master推送最新修改;
- 可以使用git clone从远程克隆一个仓库。
参考文章:
git教程--廖雪峰的官方网站
官网简介
https://xiaozhuanlan.com/topic/5810792463
网友评论