Git reset 操作及介绍

  • GIT

    (分布式版本控制系统)

    编辑

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。[1]  Git的读音为/gt/。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2]  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。[2]

以上为百度百科,其实一句话总结就是,分布式开源版本控制代码管理的东东~下面是自己捯饬的多次合并示意图

围绕上图,A1为初始版本,也叫根版本~之后的2345你就懂的!

1、tree 树状,简单理解就是AXX指定的第一个目录结构,好比扮演/etc/fstab /etc/pam.d/su的etc文件目录,讲的未必准确;

2、blob 简单理解就是真实存储了数据的文件,好比扮演/etc/fstab /etc/pam.d/su的fstab跟su文件

3、A2.1 为A2切出来的分支,A2.2你懂的~

4、master 记录指定的commit位置,文件的内容为hash值

5、HEAD 头,指针,就是指向master

通过上面我们可以清楚看到Git的整个流程步骤示意图

1、存储对象工作区

2、暂存区也可以叫index

3、工作区

下面我们就来操作,并介绍reset

1、Git仓库初始化呢

[[email protected]_master ~]# ll
总用量 44
-rw-------. 1 root root  1183 9月  22 10:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 27312 9月  22 10:02 install.log
-rw-r--r--. 1 root root  7572 9月  22 10:00 install.log.syslog
[[email protected]_master ~]# mkdir sunshine                                  #创建一个目录
[[email protected]_master ~]# cd sunshine/                                    #进入目录
[[email protected]_master sunshine]# git init                                 #初始化Git仓库
Initialized empty Git repository in /root/sunshine/.git/               #看到这个就代表成功了,并且在该目录下创建 .git该文件目录是给Git使用,这里就不详细介绍,里面内容比较懂很复杂

2、新增代码文件并提交

[[email protected]_master sunshine]# echo "print ‘Sunshine Good‘" > code.py   #新增的代码文件名问code.py
[[email protected]_master sunshine]# git status                               #查看查看的状态
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	code.py
nothing added to commit but untracked files present (use "git add" to track)
[[email protected]_master sunshine]# git add code.py                         #添加code.py
[[email protected]_master sunshine]# git commit -m "V0.0.1"                  #提交并说明
[master (root-commit) a210ba7] V0.0.1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code.py
[[email protected]_master sunshine]#

3、上述操作重复俩次,因为我们这次要讲的是reset命令

[[email protected]_master sunshine]# git add code.py 
[[email protected]_master sunshine]# git commit -m "V0.0.1"
[master (root-commit) a210ba7] V0.0.1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code.py
[[email protected]_master sunshine]# echo "print ‘Sunshine Good‘" > code1.py
[[email protected]_master sunshine]# git add code1.py 
[[email protected]_master sunshine]# git commit -m "V0.0.2"
[master d322179] V0.0.2
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code1.py
[[email protected]_master sunshine]# echo "print ‘Sunshine Good‘" > code3.py
[[email protected]_master sunshine]# git add code3.py 
[[email protected]_master sunshine]# git commit -m "V0.0.3"
[master b6d676f] V0.0.3
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 code3.py

4、使用git log --oneline 查看

[[email protected]_master sunshine]# git log --oneline                       #这个是以简要的方式显示,你们可以自己去掉 --oneline
b6d676f V0.0.3
d322179 V0.0.2
a210ba7 V0.0.1

5、使用git resert --soft

[[email protected]_master sunshine]# ll                                     #查看工作区文件
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:10 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:10 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[[email protected]_master sunshine]# git reset --soft HEAD^                 #--soft选项是仅仅还原index为v0.0.2
[[email protected]_master sunshine]# ll                                     #工作区文件没有变动
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:10 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:10 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[[email protected]_master sunshine]# git log --oneline                      #查看log,发现index回退到v0.0.2
d322179 V0.0.2
a210ba7 V0.0.1
[[email protected]_master sunshine]# git diff --cached                      #使用index对比HEAD发现有差异,证明仅仅只是index回退到v0.0.2
diff --git a/code3.py b/code3.py
new file mode 100644
index 0000000..8e34672
--- /dev/null
+++ b/code3.py
@@ -0,0 +1 @@
+print ‘Sunshine Good‘

5、使用 git reset --mixed

[[email protected]_master sunshine]# git reset --mixed HEAD                #回退版本,影响HEAD index
[[email protected]_master sunshine]# git diff --cached                     #通过index与HEAD对比发现现在是一样的咯
[[email protected]_master sunshine]# ll                                    #文件一样存在,不对工作目录影响
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:20 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py

6、使用 git reset --hard

[[email protected]_master sunshine]# git log --oneline                     #查看log
d322179 V0.0.2
a210ba7 V0.0.1
[[email protected]_master sunshine]# ll                                    #查看工作区的文件
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:20 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[[email protected]_master sunshine]# git reset --hard HEAD^                #使用--hard回退
HEAD is now at a210ba7 V0.0.1
[[email protected]_master sunshine]# ll                                    #查看文件,少了一个但是code3.py还在,是因为我们之前回退版本,该文件就没有被版本控制
总用量 8    
-rw-r--r-- 1 root root 22 10月 10 00:20 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[[email protected]_master sunshine]# git reset --hard b6d676f              #找打上面的v0.0.3,回退到该版本,发现一切都回来了
HEAD is now at b6d676f V0.0.3
[[email protected]_master sunshine]# ll                                    #查看文件,完整
总用量 12
-rw-r--r-- 1 root root 22 10月 10 00:26 code1.py
-rw-r--r-- 1 root root 22 10月 10 00:26 code3.py
-rw-r--r-- 1 root root 22 10月 10 00:05 code.py
[[email protected]_master sunshine]# git status                            #查看状态,一切都是干净的,说--hard影响index、HEAD、工作区也就是我们第二章图
# On branch master
nothing to commit (working directory clean)

看到这里你就会有点 疑惑,但是下面三点一讲你就清楚了

1、--soft影响第二张图的index

2、--mixed影响第二张图的index、存储对象工作区

3、--hard影响第二张图的index、存储区对象工作区、工作区

^-^ 讲的不好勿喷~这么晚要睡觉,也就那么一嘴吧唧吧唧一通~

时间: 2024-10-15 05:07:11

Git reset 操作及介绍的相关文章

git reset 操作后回滚

在使用git的过程中,虽然每次reset,rebase的时候你都小心翼翼,但是常在河边走,哪能不湿鞋?冷不丁一天状态不好,reset以后,发现你要的commit都不见了!心急如焚的你该如何处理这样的"突发事件"呢?显然,git是不会让你选择重写代码的.这时候,回滚操作就是你的最后一根救命稻草了! 1. $ git reflog 这条命令,基本上能让你知道你最近做的所有操作了,找到想回滚到哪一步,再执行 $ git reset --hard e0e9999 大功告成,刷新一下你的git界

Git本地操作相关介绍

本地使用git时遇到问题及解决方案总结: 1.git push origin master 后,终端上出现错误信息: push失败,原因多半是因为github上远程仓库中有Reademe.md文件 解决方法:先 git pull --rebase origin master 或者 git pull origin master后,再进行git push origin master 2.git remote rm origin 取消本地仓库与远程仓库的关联 3.git remote add orig

代码回滚:git reset、git checkout和git revert区别和联系

git reset.git checkout和git revert是你的Git工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文件. 因为它们非常相似,所以我们经常会搞混,不知道什么场景下该用哪个命令.在这篇文章中,我们会比较git reset.git checkout和git revert最常见的用法.希望你在看完后能游刃有余地使用这些命令来管理你的仓库. Git仓库有三个主要组成——工作目录,缓存区和提交历史.这张图有助于理解每个

恢复 git reset -hard 的误操作

有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一.直到最近我才发现git的历史记录是不可修改的,也就是说你不能更 改任何已经发生的事情.你做的任何操作都只是在原来的操作上修改.也就是说,即使你删除了一个分支,修改了一个提交,或者强制重置,你仍然可以回滚这些操 作. 让我们来看一些例子: $ git

git reset本地常见操作

git reset命令用于将当前分支回退到指定的某个版本. 基本用法 git reset [--hard] commitversion 详解 该命令可以看做commit命令的取反操作,既然可以向前提交,当然也可以向后回滚.可以像事务一样回滚一次到上一次的位置,也可以回滚到指定的位置.这个位置由commitversion决定,每commit一次都会产生一个commitversion值. 1 --hard 选项在帮助文档中的解释是:Resets the index and working tree.

Git误操作 git reset强制回滚 恢复commit方法

参考: 找回Git中丢失的Commit Git误操作 git reset强制回滚 恢复commit方法 使用Git时,常有误操作,在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时Commmit记录也消失了. 此时解决方法是通过git reflog来查看先前记录并恢复: git reflog会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会

Git和Github的介绍、简单操作

目的:   1.git与github简介  2.Git与SVN区别 3.Github 的简单使用 4.下载安装Git-20-64-bit.exe   5.Git常用命令 5.1Git命令使用场景 5.2常用命令 5.3实践操作:使用git提交文件至远程仓库 Git与Github简介 Git简介:Git是一个开源的[分布式][版本控制系统],用于敏捷高效地处理任何或小或大的项目 版本控制器: CVS/SVN/Git SVN: 客户端/服务器 GIT: 客户端/代码托管网站(例如:github) 注

git的使用入门介绍-3

今天,还是继续介绍一下git基本使用,一个比较重要的功能,撤销操作 任何时候,你都有可能需要撤销刚才所做的某些操作,好,废话不多 情况1:修改最后一次提交 当我们提交完了,才发现有几个漏掉了,或者提交的说明消息写的不怎么准确,可以用--amend 如果不在对文件做任何操作,运行git commit --amend则相当于有机会修改提交说明 下面举个例子说明一下: $ git commit -m 'initial commit' $ git add forgoten_file $ git comm

[转] git reset简介

http://blog.csdn.net/hudashi/article/details/7664464 http://guibin.iteye.com/blog/1014369 http://hi.baidu.com/tiger_tnt/blog/item/a0464ffa6a8115d9b58f314d.html http://web.mit.edu/~mkgray/project/silk/root/afs/sipb/project/git/git-doc/git-reset.html 一