Git—小白进击(入门)

前言

掌握git命令是每个程序员必备的,至少在git还没退出大家视线的时间段,每个程序员都必须掌握它。因为之前我是用SVN的,所以很多git的命令都忘了,于是写了这篇博客。

git是什么

百度上是这么定义的这里插入图片描述
什么是版本控制呢?

想一想之前大学的毕业论文,是不是改了又改,其实这就是版本变更的真实写照。而版本控制就是对这些论文变更的管理控制。

什么是分布式

市面上的版本控制系统有很多,就像我在前言中说的svn就是一种版本控制系统。只不过SVN的版本控制是集中式的,而git的版本控制是分布式

关于分布式版本控制系统,就是远程仓库同步所有版本信息到本地的每个用户。有下列三点:

  • 用户在本地就可以查看所有的历史版本信息,但是偶尔要从远程更新一下,因为可能别的用户有文件修改提交到远程哦。
  • 用户即使离线也可以提交,在push时才需要联网。
  • 每个用户都保存了历史版本,只要有一个用户设备没问题,就可以恢复数据。
    在这里插入图片描述

git的相关理论

git的四大工作区域

在这里插入图片描述
如图,展示的git的工作区

  • Workspace:你电脑本地看到的文件和目录
  • Index/Stage:暂存区,一般存放在.git目录下,就是.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如你执行git add,这些改动就添加到这个区域了。
  • Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。他是一个存放在本地的,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库了
  • Remote:远程仓库,就是类似GitHub,码云等网站提供的仓库,可以理解为远程数据交换的仓库。

git的工作流程

知道了git的四大工作区,来看看它是这么工作的把。不多bb,上图

在这里插入图片描述
git正向的工作流程:

  • 从远程仓库(github,码云…)拉取文件代码
  • 在工作目录。增删改查文件
  • 把改动的文件放入暂存区
  • 将暂存区的文件提交到本地文件
  • 将本地仓库的文件推送到远程仓库

git文件的四种状态

根据一个文件是否已经加入版本控制,可以把文件分为:

  • Tracked (已跟踪)
  • Untracked(未跟踪)

而Tracked(已跟踪)又包括三种工作状态

  • Unmodified
  • Modified
  • Staged
    在这里插入图片描述1111111
  • Untracked:文件还没有加入到git库,还没有参与版本控制,即未跟踪状态。这时候的文件,通过git add 命令,可以变为Staged状态。
  • Unmodified:文件已经加入git库,但是呢还没修改,就是说版本库中的文件快照内容与文件夹中还完全一致。Unmodofied的文件如果被修改,就会变成Modified。如果使用git remove移出版本库,则成为Untracked文件。
  • Modified:文件被修改了,就进入modified状态啦。文件这个状态可以通过stage命令进入stage状态。
  • Staged:暂存状态,执行git commit 则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodified状态。

一张图解释git工作原理

在这里插入图片描述

日常开发中,git基本常用命令

  • git clone
  • git checkout -b dev
  • git add
  • git commit
  • git log
  • git diff
  • git status
  • git pull / git fetch
  • git push

git基本命令使用流程
在这里插入图片描述

git clone

当我们要进行开发时,第一步就是要克隆远程版本库到本地

git clone url        克隆远程版本库

git checkout -b dev

克隆完之后,开发新需求的话,我要需要新建一个开发分支,这里新建了一个dev分支

git checkout -b dev        创建开发分支dev,并切换到该分支下

git add

git add 使用格式

git add .	添加当前目录的所有文件到暂存区
git add [dir]	添加指定目录到暂存区,包括子目录
git add [file1]	添加指定文件到暂存区

有了开发分支后,我们就可以开发了。假设我们开发完了 helloWorld.vue,可以把它放到暂存区,命令如下

git add helloWorld.vue        把helloWorld.vue文件添加到暂存区

git commit

git commit 使用格式

git commit -m [message] 提交暂存区到仓库区,message为说明信息
git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库
git commit --amend -m [message] 使用一次新的commit,替代上一次提交

将helloWorld.vue文件添加到暂存区后,我们就可以提交到本地仓库了

git commit -m helloWorld.vue        把helloWorld.vue文件提交到本地仓库

git status

git status,表示查看工作区状态,使用格式

git status  查看当前工作区暂存区变动
git status -s  查看当前工作区暂存区变动,概要信息
git status  --show-stash 查询工作区中是否有stash(暂存的文件)

当你忘记是否把代码添加到暂存区或者是否提交到本地仓库,都可以用git status看看哦~

git log

git log ,这个命令用来查看提交日志/提交历史

git log  查看提交历史
git log --oneline 以精简模式显示查看提交历史
git log -p <file> 查看指定文件的提交历史
git blame <file> 一列表方式查看指定文件的提交历史

git diff

git diff ,对比文件修改差异

git diff 显示暂存区和工作区的差异
git diff filepath   filepath路径文件中,工作区与暂存区的比较差异
git diff HEAD filepath 工作区与HEAD ( 当前工作分支)的比较差异
git diff branchName filepath 当前分支的文件与branchName分支的文件的比较差异
git diff commitId filepath 与某一次提交的比较差异

git pull / git fetch

我们一般都会用git pull 拉取最新的代码看看,解决一下冲突,在推送到远程仓库

git pull  拉取远程仓库所有分支更新并合并到本地分支。
git pull origin master 将远程master分支合并到当前本地分支
git pull origin master:master 将远程master分支合并到当前本地master分支,冒号后面表示本地分支
git fetch --all  拉取所有远端的最新代码
git fetch origin master 拉取远程最新master分支代码

*注:有些小伙伴可能对使用 git pull 和 git fetch 有点疑惑,其实 git pull = git fetch + git merge 。pull的话,拉取远程分支并合并并与本地分支合并,fetch只是拉远程分支,怎么合并,可以直接选择。

git push

git push 可以推送本地分支,标签到远程仓库,也可以删除远程分支

git push origin master 将本地分支的更新全部推送到远程仓库master分支。
git push origin -d <branchname>   删除远程branchname分支
git push --tags 推送所有标签

git reset (版本回退)

git reset 的理解

git的所有提交,会连成一条时间轴线,这就是分支。如果当前分支是master,HEAD指针一遍指向当前分支,如图:
在这里插入图片描述
假设执行了git reset,回退到版本二,版本三就不见了,如图:
在这里插入图片描述

git reset 的使用

git reset HEAD --file
回退暂存区里的某个文件,回退到当前版本工作区状态
git reset –-soft 目标版本号 可以把版本库上的提交回退到暂存区,修改记录保留
git reset –-mixed 目标版本号 可以把版本库上的提交回退到工作区,修改记录保留
git reset –-hard  可以把版本库上的提交彻底回退,修改的记录全部revert。

在这里插入图片描述
举个栗子,代码 git add 到暂存区,并未commit提交,可以这样退回,如下

git reset HEAD file 取消暂存
git checkout file 撤销修改

还有一个栗子,代码已经git commit 还没push

git log  获取到想要回退的commit_id
git reset --hard commit_id  想回到过去,回到过去的commit_id

如果代码已经push到远程仓库了,也可以使用reset回滚

git log
git reset --hard commit_id
git push origin HEAD --force
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值