Git笔记-必知习惯和版本回退

简单的Git使用习惯

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

 假设在上篇learn.txt.txt的原文有如下内容:(版本1)
  Git is a version control system.
  Git is free software.
 更改:(版本2)内容没变但是修改了文件名字改回正常的learn.txt。在git bash输入:
查看
 可以看到我们在master分支,与远端的master数据共享,修改了文件名字,可以看到消息是:相当是删除了,然后新建了一个readme.txt

如何回退版本

git reset 命令:

git reset --hard HEAD^  //回退到上个版本
git reset --hard <commit_id的前几个数字>  //回退到指定的版本

git log 命令:

git log  //查看commit的历史记录
git log --pretty=oneline  //查看提交日志
git reflog  //记录你的每一条命令
 场景1:

 已经提交了不合适的修改到版本库时,同时,你还没有把自己的本地版本库推送到远程,想要撤销本次提交。
 更改(版本3)并提交:
  Git is a distributed version control system.
  Git is free software distributed under the GPL.
 完蛋,改错了!Git的commit好比一个快照。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
 想查看提交日志怎么办?这时我们用git log命令查看:
log
 还可以使用git log --pretty=oneline,它比git log表达的信息量少些。
log
注意:
 看到的一大串类似b3cc477b8567…的是commit id(版本号),是一个SHA1计算出来的一个非常大的数字,用十六进制表示。
 每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具(如,SourceTree)查看Git历史,就可以更清楚地看到提交历史的时间线。

 接下来要把readme.txt回退到上一个版本,也就是上一个text的那个版本,怎么做呢?
 Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交b3cc477b8567…,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^,当然往上100个版本是HEAD~100。
 我们要把当前版本append GPL回退到上一个版本adddistributed,就可以使用git reset命令:
reset
 使用cat命令查看一下learn.txt文件内容:
cat
 再用git log命令看一下日志,发现没有了1.1版本:
log
 如何再回去1.1版本呢?只要上面窗口还没有关闭,那么就可以通过那个1.1版本的commit id是b3cc477b8567…,于是就可以指定回到未来的某个版本:gitreset --hard b3cc47 操作一波。
reset
注意:

  • 关于HEAD的介绍。Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向1.1版本,然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

  • 关闭了窗口,看不到commit id,还是有解决办法的。Git提供了一个命令git reflog用来记录你的每一次命令。快速查到commit id。

 场景2:

 已经提交了不合适的修改到版本库时,同时已经push到远端。希望能够回退到以前的版本。
step 1:先在本地回退到相应的版本

git reset --hard <版本号>

注意:

  • 使用 --hard 参数会抛弃当前工作区的修改
  • 使用 --soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交
    step 2:为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数 –force
git push origin <分支名> --force

 因为,如果此时使用三步走的最后一步的话,会提示本地的版本落后于远端的版本;

git push origin <分支名>

必知的概念

 1、工作区

 在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
work

 2、版本库(Repository)

 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git的版本库。Git的版本库里存了很多东西,最重要的就是称为 stage(或者叫index)的暂存区,还有Git为我们 自动创建的第一个分支master,以及指向master的一个指针叫 HEAD
work
 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在git commit就是往master分支上提交更改。总结一句话:需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。大兄弟,来实践一波,更改learn.txt(版本4)
  Git is a distributed version control system.
  Git is free software distributed under the GPL.
  Git has a mutable indexcalled stage.
 然后,在工作区新增一个LICENSE文本文件(内容随便写)。先用git status查看一下状态:
status
 Git清楚地告诉我们在master分支,learn.txt被修改了,而LICENSE还从来没有被添加过到版本区,所以它的状态是Untracked。
 使用命令 git add .,把learn.txt和LICENSE都添加后,用git status再查看一下:
add
 现在,暂存区的状态就变成这样了。
status
 所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
commit
 现在版本库变成了这样,暂存区就没有任何内容了。
status

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值