git入门学习(二)版本控制

说明

只是单纯的记录学习过程
之前我们学习了如果初始化一个版本库,和如何提交
今天学习目:
1版本回退
2工作区和暂存区
3管理修改
4撤销修改
5删除文件

版本回退

我们练习一次修改文件.并进行提交这样我们就一共修改了三次
廖雪峰老师说的超级容易懂:
像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失
现在我们回顾一下 hello.txt文件已经有三个版本提交到Git仓库里了
当然如果记不住,也没关系.我们可以通过

$ git log

Alt
可以看到 我有三个版本,并且会显示我们的用户名,联系方式,时间,和之前commit时的备注信息
当然如果你觉得输出的东西太多可以试试加上–pretty=oneline参数:

$ git log --pretty=oneline
61ba434205352423102f242d58caadf18b177545 (HEAD -> master) change 3 hello.txt
2dd708896a1e09542831fa7a85b4b7093415016f change hello.txt
00c9f68503242971872269fb77ed6a7895ecc46a add hello.txt

简洁了不少对吧
好了我们要开始做时光穿梭机啦
有没有发现我们每条记录前面都有一个很大的值,而这个值就是版本号(SHA1计算出来的非常大的数字,用十六进制表示,你看到的和我的一定会不一样以你自己的为准)
当然我们必须要知道当前是哪个版本,在Git中用HEAD表示当前版本,上一个版本就是HEAD^上上一个版本就是HEAD ^^以此类推
现在我们要把当前版本回退到上一个版本,就可以使用git reset命令

$ git reset --hard HEAD^
HEAD is now at 2dd7088 change hello.txt

如果这样就是成功了,可以查看一下文件,果然回复到上一次提交的时候了.
此时我们在通过 git log 看一下会发现最新的那个版本已经看不到了,但我们穿梭时空到了唐朝就不能回来了???放心办法还是有的,当然这个界面还没有关对吧,快点往上翻看一下之前最新的版本号,
在通过命令

$ git reset --hard 61ba43
HEAD is now at 61ba434 change 3 hello.txt

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
在通过git log 查看一下 哈哈 又回来啦
但是我们要是只能通过往上翻的这种办法也太没有逼格了
在Git中我们可以无所欲为 哈哈哈
我们可以通过git reflog 查看我们每次提交的版本号 并且会加上备注信息所以 我们备注信息一定要见名知意,最起码我们要自己看得懂.

$ git reflog
2dd7088 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
61ba434 HEAD@{1}: reset: moving to 61ba43
2dd7088 (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
61ba434 HEAD@{3}: commit: change 3 hello.txt
2dd7088 (HEAD -> master) HEAD@{4}: commit: change hello.txt
00c9f68 HEAD@{5}: commit (initial): add hello.txt

工作区和暂存区

工作区:就是我们电脑中能看到的目录,我们的项目目录工作区中我们班有一个.git目录这是Git的版本库在版本库里存着很多东西最重要的就是我们的暂存区(stage),还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
git add 命令实际就是要把我们所有修改的内容提交到了暂存区,然后执行 git commit 就可以把暂存区的所有修改提交到分支

撤销修改

在我们修改完之后,突然发现莫名出问题了.想要恢复到修改之前的样子:
此时我们分为两张情况,该项目还在工作区(也就是说我们还没有 git add )

//查看一下git状态
 git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
        modified:   test.txt
no changes added to commit (use "git add" and/or "git commit -a")

git checkout – 可以看到Git已经告诉我们如何做了
输入以下命令:
git checkout --文件名
再次查看该文件你应该会发现已经恢复到修改之前了

第二种情况,该项目已经被你add到暂存区了,但很幸运在你commit之前你及时的发现了自己愚蠢的行为

//查看一下git状态
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        modified:   test.txt

(use “git reset HEAD …” to unstage)Git告诉我们通过这个办法可以吧暂存区的修改撤销掉,重新放回工作区
之后在重复一种情况的方法就解决啦

还有一种情况就是你已经提交到了版本库,我们可以通过版本回退回退到上一个版本不过室友前提的.就是还没有把自己的本地版本库推送的远程,后面咱们应该会学到远程版本库,一旦提交到远程版本库,那就真的完蛋啦~~~~~~~~~~~~~~~~~~~~

删除

当我们失误把工作区的文件删了之后,可以通过
git check – 文件名 回复
如果真的要在版本库中删除
git rm 文件名就删除了

结束

$ git log --pretty=oneline 查看所有版本日志
$ git reset --hard HEAD^ 退回到上一个版本
$ git reset --hard 版本号 返回到指定版本
$git diff HEAD – 文件名 可以查看工作区和版本库最新版本的区别
$git checkout – 文件名 在暂存区返回修改之前的版本
$git reset HEAD 文件名 可以吧暂存区的修改撤销掉
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

猜你喜欢

转载自blog.csdn.net/weixin_39907636/article/details/83546597
今日推荐