git中reset和checkout的总结整理

  各位看官好,git  reset和checkout是git中比较常用的两种方法,今天我想来总结一下reset和checkout的原理和架构。

  一、reset的原理

  二、reset的三种应用

  三、checkout的原理

  四、checkout的应用

  1、reset的原理

  1.1 关于git中三个区的说明

  要说明git reset的原理,首先要简单说一下git的三个区和HEAD问题。在git中一共有三个区,分别是工作区,暂存区和提交区。其三者的对应关系是这样的:

工作区通过git add添加到暂存区,而暂存区通过git commit添加到提交区,这样一个流程。

  1.2 关于git中HEAD指针的问题

  git中存在一个HEAD指针,即为每次提交一次HEAD指针就会向前进一位,这里要说明的是HEAD指针存在于暂存区和提交区,而不存在于工作区。也就是说在上一版的基础上,如果我们使用git add命令,那么此时HEAD指针会进入到暂存区,继续用git commit,此时会进入到提交区。

  1.3 关于git reset的原理说明

  那么说完了这些,我们就说一下git reset的原理。git reset的原理简单来说就是把HEAD指针回退一位。即如果你在提交区,那么你回退一位就是暂存区,如果你在暂存区,那么指针会回退到上一次的提交区。

  2.1 git reset的三种使用方法

  git命令中对reset命令制定了三种使用方法。分别是--soft  --mixed  --hard,这三种方式。

  即为git  reset  --soft

git  reset  --mixed

      git   reset   --hard

  其中soft就是reset中最原始的用法,只是将HEAD指针移动到上一次。而mixed则对其又进了一步,除了将HEAD指针移动到上一次的提交,还将暂存区的内容也一并清空。hard命令则对其又进了一步,除了HEAD指针移动到上一次的提交和将暂存区的内容也一并清空外,还将工作区的内容也一并清空。即:

  soft:移动指针

  mixed:移动指针+清空暂存区

  hard:移动指针+清空暂存区+清空工作区。

3、checkout的原理

  说完了git reset,我们来说一下checkout命令,checkout的原理基础也是和HEAD有关。checkout命令就是把把当前代码更新成头指针指向的提交

4、checkout的应用

  checkout的应用有很多种,但是最常用的还是两种,第一种就是切换分支,第二种就是更新工作区。

  第一种应用场景:

  git checkout <branch>  这种原理就是将HEAD指针指向另一个分支,同时将其覆盖

  第二种应用场景:

  git  checkout   <file>     这种使用的前提就是头指针指向的提交与当前你所在的区域不是一个,使用该命令可以使其内容更新成上一版提交。

  当然,checkout的应用有很多种,这两种只是我目前为止用过的。

总结:

这回我们说了reset的原理,应用,以及checkout的原理和应用。总结一下:

  1、reset的原理就是将头指针回退到上一个。

  2、其应用可以分成三个部分,soft,mixed,hard三种

  3、checkout的原理就是把当前代码更新成头指针指向的提交

  4、其应用有两个,第一,切换分支。第二,更新当前内容。

  

原文地址:https://www.cnblogs.com/songyuchen/p/12574993.html

时间: 2024-10-03 23:53:34

git中reset和checkout的总结整理的相关文章

一图看懂git版本管理 reset revert checkout

git是一个流程,流程就有提交和回滚,git提供这些命令就是让你提交修改和回滚修改的. 自己用powerdesign画了一张图,可以很容易看懂git中版本如何向前提交和向后回滚 提交相关:add,comit 回滚相关:reset,revert,checkout 下图小人 1,2,3 分别表示git的三个重要概念:工作区,暂存区,本地版本库. 初始状态txt文件都指向v1版本状态. 原文地址:https://www.cnblogs.com/reachlins/p/9146135.html

git代码回滚:Reset、Checkout、Revert的选择

代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Home 2.1 快速指南 2.2 创建代码仓库 2.3 保存你的更改 2.4 检查仓库状态 2.5 检出之前的提交 2.6 回滚错误的修改 2.7 重写项目历史 3.2 保持同步 3.3 创建Pull Request 3.4 使用分支 3.5 常见工作流比较 4.1 图解Git命令 5.1 代码合并:

在 Git 中 Checkout 历史版本

昨天写代码的时候,误删了一个文件.今天发现的时候,commit 已经 push 到版本库了.本想用 git reset 回退版本,找回文件后重新提交.但是想起 Git 是一个版本控制系统哎,直接从版本库里 checkout 出某个文件的历史版本不就好了? 想法挺好,但是很久没用这个功能,自己已经不记得具体的命令了.于是查了下手册,把和 checkout 历史版本有关的几个命令都记录一下. 从某个历史版本创建新的分支 在 Git 中从当前分支创建并检出新分支的命令是 git checkout -b

git中常用的操作命令有哪些?常用操作命令归纳

git中常用的操作命令有哪些?本篇文章就给到大家归纳了一些git中常用操作命令.有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. git开始 全局配置:配置用户名和e-mail地址 1 2 $ git config --global user.name"Your Name" $ git config --global user.email"[email protected]" git init:初始化git仓库,目录下生成一个.git文件 1 git

【转】如何在Git中撤销一切

翻译:李伟 审校:张帆译自:Github 任何一个版本控制系统中,最有用的特性之一莫过于 “撤销(undo)”操作.在Git中,“撤销”有很多种含义. 当你完成了一次新的提交(commit),Git会及时存储当前时刻仓库(repository)的快照(snapshot):你能够使用Git将项目回退到任何之前的版本. 下文中,我将列举几个常见的.需要“撤销”的场景,并且展示如何使用Git来完成这些操作. 一.撤销一个公共修改 Undo a "public" change 场景:你刚刚用g

(转)找回Git中丢失的Commit

总结:更新代码前一定要先将本地修改的文件存到本地git仓库.今天脑残直接更新了远程仓库代码导入今天写的代码...... @[git|commit|reflog] 在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了.碰到这种情况,不要慌,我们在Git上做的任何

使用Git中的Merge与Rebase与开源项目同步代码

基于开源项目的开发有两种主要工作模式.模式1是在从开源项目中拉出一个分支,在这个分支中开发新feature,完成后合并到upstream中.适用于本身是开源项目的developer.模式2是从开源项目中拉出分支后独立发展,但定期从upstream拉更新(如重要版本升级时).无论是哪种,都会面临本地分支与upstream同步代码的问题.为此,git主要提供了两种方式:一种是merge, 一种是rebase.下面通过例子简单过一下它们的基本流程. 假设开源项目的git地址为git://xxx.org

辛星浅析git中的版本回退

首先需要说的就是commit  id,它和svn不同,git的commit id不是1,2,3...这种递增的数字,而是一个SHA1计算出来的一个非常大的数字,它用十六进制来表示,因为git是分布式的版本控制系统,所以就只能用这种方式了. 在git中,我们用HEAD表示当前版本,上一个版本就是HEAD^,上上个版本就是HEAD^^,如果我们前100个版本就是HEAD后面跟100个^,但是我们通常不这么写,我们通常写成HEAD~100. 而且我们回退使用git  reset命令,比如我们要回退到上

Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase

上篇博客聊了<git分支管理之rebase 以及 cherry-pick相关操作>本篇博客我们就以Learning Git中的关卡进行展开.下方列举了LearningGit中的 merge.rebase.reset.revert.cherry-pick 以及交互式rebase相关关卡的操作以及对应的解析.后边在聊交互式rebase操作是,不单单给出了LearningGit中的内容,而且给出了真正的Git分支在交互式rebase操作时的具体案例. learngitbranching的地址为:ht