Git Reset简介

来源:互联网 发布:激战2诺恩男捏脸数据 编辑:程序博客网 时间:2024/06/05 17:14

本文编辑整理自:http://guibin.iteye.com/blog/1014369
http://web.mit.edu/~mkgray/project/silk/root/afs/sipb/project/git/git-doc/git-reset.html

1、基本篇

在git的一般使用中,如果发现错误的将不同阶段的文件add进入index之后,想回退取消,则可以使用命令:git reset HEAD …,同时git add完毕之后,git也会做相应的提示,比如:

Changes to be committed:   (use "git reset HEAD <file>..." to unstage)     new file:   Test.scala 

2、什么是git reset:

git reset [–hard|soft|mixed|merge|keep] [或HEAD]:将当前的分支重设(reset)到指定的或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。

mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。

A).–hard

重设(reset) index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向。
具体一个例子,假设有三个commit, git st:

commit3: add test3.ccommit2: add test2.ccommit1: add test1.c

执行git reset –hard HEAD~1后,
显示:HEAD is now at commit2,运行git log
commit2: add test2.c
commit1: add test1.c

运行git status, 没有任何变化


B). –soft:

index和working directory中的内容不作任何改变,仅仅把HEAD指向。这个模式的效果是,执行完毕后,自从以来的所有改变都会显示在git status的”Changes to be committed”中。
具体一个例子,假设有三个commit, git status:

commit3: add test3.ccommit2: add test2.ccommit1: add test1.c

执行git reset –soft(默认) HEAD~1后,运行git log

commit2: add test2.ccommit1: add test1.c

运行git status, 则test3.c处于暂存区,处于准备提交状态。即此时git commit就会提交它。


C). –mixed:

仅reset index,但是不reset working directory。这个模式是默认模式,它的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成”Changes to be committed”,但是会打出什么还未被更新的报告。报告如下:

Unstaged changes after reset: M Test.Scala M test.txt

D). –merge和–keep用的不多


0 0