精华内容
下载资源
问答
  • Gitgit-reset的用法总结

    千次阅读 2018-07-31 17:32:53
    Git reset感觉是相当复杂的一个指令,用了快一年了,总感觉还没有用明白,所以,需要好好总结一下。 语法 git reset [-q] [<tree-ish>] [--] &...

    概要

    Git:git-reset的用法总结。

    博客

    博客地址:IT老兵驿站

    前言

    Git reset感觉是相当复杂的一个指令,用了快一年了,总感觉还没有用明白,所以,需要好好总结一下。

    语法

    git reset [-q] [<tree-ish>] [--] <paths>…​
    git reset (--patch | -p) [<tree-ish>] [--] [<paths>…​]
    git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
    

    这个命令有三种用法,前两种用来从<tree-ish>所指定的地方拷贝条目到index区域。
    其实这个是说从仓库的某一个版本获取到index区域,感觉这个用法更多是用在了对于git add等操作的逆向操作。

    第三种格式,将当前分支的HEAD指针设定为<commit> 这个提交号,同时可以选择性地修改index和工作区域。

    tree-ish是什么意思呢?要参考这里,是Git所使用的指明路径的语法。类似以下这样的格式:

    <rev>:<path>, e.g. HEAD:README, :README, master:./README
    	
    A suffix : followed by a path names the blob or tree at the given path in the tree-ish object named by the part before the colon.
    

    是指某个版本的某个文件,或者某个分支的某个文件。

    用法1

    git reset [-q] [<tree-ish>] [--] <paths>…​

    This form resets the index entries for all to their state at . (It does not affect the working tree or the current branch.)

    This means that git reset is the opposite of git add .

    After running git reset to update the index entry, you can use git-checkout[1] to check the contents out of the index to the working tree. Alternatively, using git-checkout[1] and specifying a commit, you can copy the contents of a path out of a commit to the index and to the working tree in one go.

    这个用法将index区域所有符合的条目修改为<tree-ish> 的状态。(这并不影响工作目录或者当前分支。)
    这个reset是更新index条目,更新后,可以从index中通过checkout指令获取内容到工作目录。如果git checkout指定了一个提交号,那么就可以根据这个提交号更新内容到index和工作目录。

    关于ORIG_HEAD的介绍:需要参考这里

    HEAD is (direct or indirect, i.e. symbolic) reference to the current commit. It is a commit that you have checked in the working directory (unless you made some changes, or equivalent), and it is a commit on top of which “git commit” would make a new one. Usually HEAD is symbolic reference to some other named branch; this branch is currently checked out branch, or current branch. HEAD can also point directly to a commit; this state is called “detached HEAD”, and can be understood as being on unnamed, anonymous branch.

    And @ alone is a shortcut for HEAD, since Git 1.8.5

    ORIG_HEAD is previous state of HEAD, set by commands that have possibly dangerous behavior, to be easy to revert them. It is less useful now that Git has reflog: HEAD@{1} is roughly equivalent to ORIG_HEAD (HEAD@{1} is always last value of HEAD, ORIG_HEAD is last value of HEAD before dangerous operation).

    For more information read git(1) manpage, Git User’s Manual, the Git Community Book and Git Glossary

    HEAD是指当前分支上当前的提交号。
    ORIG_HEAD 是指上一个HEAD所指向的提交号。
    这其实是两个指针,第二个指针的设计其实是为了做保护,一旦第一个指针被误操作了,还有机会去挽回。

    实例:
    将发生改变的文件 _config.yml加入index

    $ git add _config.yml
    

    这样_config.yml 文件就被加入到index区域中,显示成:

    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   _config.yml
    

    撤销上面的操作,恢复_config.yml为版本库中的状态:

    $ git reset _config.yml
    

    这种用法相当于<tree-ish>的参数设置为HEAD

    用法2

    git reset (--patch | -p) [<tree-ish>] [--] [<paths>…​]

    Interactively select hunks in the difference between the index and (defaults to HEAD). The chosen hunks are applied in reverse to the index.

    This means that git reset -p is the opposite of git add -p, i.e. you can use it to selectively reset hunks. See the “Interactive Mode” section of git-add[1] to learn how to operate the --patch mode.

    这个用法是以patch 的方式展示出来需要reset的代码, git reset -pgit add -p 就是一对互为反向的操作,后者是把工作目录下变更的代码以patch 的方式展示出来,以互动的方式应用到index上,前者则是一个反向操作。

    实例:
    将发生改变的文件 _config.yml加入index

    $ git add -p  _config.yml
    

    撤销上面的操作:

    $ git reset -p  _config.yml
    

    可以看到,这种用法相对上面那一种用法其实是增加了互动的提醒。

    用法3

    git reset [<mode>] [<commit>]

    This form resets the current branch head to and possibly updates the index (resetting it to the tree of ) and the working tree depending on . If is omitted, defaults to “–mixed”. The must be one of the following:

    这个用法是用来设置当前的分支的HEAD指针,或者index 的指向当前版本的指针,或者工作空间指向当前版本的指针。

    –soft
    Does not touch the index file or the working tree at all (but resets the head to , just like all modes do). This leaves all your changed files “Changes to be committed”, as git status would put it.

    soft参数用来设置HEAD指针。

    –mixed
    Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.

    mixed参数用来设置index指针,文件的修改仍然会被保留,但是没有纳入到index中。

    If -N is specified, removed paths are marked as intent-to-add (see git-add[1]).

    –hard
    Resets the index and working tree. Any changes to tracked files in the working tree since are discarded.

    hard重置index和工作区域,所有在这个<commit>之后的修改将被丢弃。

    –merge
    Resets the index and updates the files in the working tree that are different between and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between and the index has unstaged changes, reset is aborted.

    In other words, --merge does something like a git read-tree -u -m , but carries forward unmerged index entries.

    merge重置index ,并且更新那些工作区的文件(在<commit>HEAD中不同的)。这个还需要进一步理解一下。

    –keep
    Resets index entries and updates files in the working tree that are different between and HEAD. If a file that is different between and HEAD has local changes, reset is aborted.

    If you want to undo a commit other than the latest on a branch, git-revert[1] is your friend.

    实例 版本库中的提交如下:

    commit cac453cf6501c3ea3b626636bc4399ed48704543 (HEAD -> master, origin/master, origin/HEAD)
    Author: xxx <xxx@xxx.xxx>
    Date:   Fri Jul 27 18:08:46 2018 +0800
    
        从版本库中移除项目配置文件和日志配置文件
    
    commit cd36b7297106a871ae331f487179fd5584fb38cd
    Author: xxx <xxx@xxx.xxx>
    Date:   Fri Jul 27 18:06:37 2018 +0800
    
        暂时参考原来的逻辑,使用硬编码的方式,新增了权限
    
    commit 24f19e80b5b8e2c05faf04706d95b5ac538ddbdd (f_1486)
    Author: xxx <xxx@xxx.xxx>
    Date:   Wed Jul 11 22:00:43 2018 +0800
    
        修改了login的登录按钮的宽度
    
    commit e948bb044676ff917be862d9fae8391ba1b82351
    Author: xxx <xxx@xxx.xxx>
    Date:   Tue Jul 10 23:39:28 2018 +0800
    
        完成初步的修改
    

    现在发现最后三次提交是存在问题的,不应该直接提交到master上,这个时候需要把HEAD指针恢复到倒数第四次提交上。

    git reset --soft e948bb044676ff917be862d9fae8391ba1b82351
    

    这样后面三次提交的改变从版本库还原出来,变成尚未提交的状态,这样我们就可以新开一个临时的dev分支,继续我们之前的工作(参考Git Flow一篇文章)。

    展开全文
  • git reset --hard 和 git reset --soft区别

    万次阅读 多人点赞 2017-03-12 22:50:52
    有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。 1、二者区别: git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file...

    有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。
    1、二者区别:

    git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
    git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;

    2、具体用法如下:

    使用git log命令查看本地的所有提交

    现在想要撤销最后一次提交,即上图中“OTMS-25838: rollback the modification in OrderDto”这个commit;
    (1)git reset --hard使用示例:

     

    使用命令git reset --hard 1c38838ad39b396e271cb10e2146a1d673b4a2b9撤回制定版本号(不包括该提交)之前的所有提交。

    注意:上述命令执行成功之后,会彻底返回到回退前的版本状态,新发生的变更将会丢失。对于部分发生了变更,但是变更部分的文件夹存在未提交的文件可能导致目录非空而删除失败,此时需要自行处置。

     

    (2)git reset –-soft使用示例:

    初始状态,可见当前分支最后一个提交是debug the initialization page

    现在要撤销该commit,但是又不能撤销该提交包含的更改,使用git reset --soft,执行结果为

     

    可见commit取消了,代码更改并没有取消。

    展开全文
  • 主要介绍了详解git reset --hard 和 git reset --soft区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • git reset -- hard,使用的时候,在不同的分支切换比较方便:但是切换之后,在一个分支更新后,看不到原来的东西了。 1 切换方便: 2 利用git log 找回,HARD RESET 的 commit的ID号码 $ git log -g 3 再...

    前言:

    git reset -- hard,使用的时候,在不同的分支切换比较方便:但是切换之后,在一个分支更新后,看不到原来的东西了。


     1 切换方便:

    2 利用git log 找回,HARD RESET 的 commit的ID号码

    $ git log -g

    3 再切换回去:

    然后用“$ git reset --hard 2f564ec5fde6b5982e93ba0672092ce8b8d2b315”

     

    展开全文
  • 一、 在git操作中,有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。 1、二者区别: git reset –-soft:回退到某个版本,只回退了commit的信息,...

    一、 在git操作中,有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。

    1、二者区别:

    git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
    git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉;

    2、具体用法如下:

    使用git log命令查看本地的所有提交

    最近一共进行了三次操作,分别是先创建了一个文件,wrote a file,然后修改加上我的名字后,再提交,操作说明add my name,第三次修改,加上我的年龄,提交说明add my age

    使用命令git reset --hard head^(上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100)

    将我加上我的年龄的那一次修改撤销,执行git log指令,可以看到,add my age 的commit 已经被撤销,打开文件查看:

    修改的内容也被撤销了。

    使用命令git reset --soft head^后,在用git log查看,发现add my age的commit的操作也被撤销了,但是打开文件查看,

    修改的内容还在,即--soft

    保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可。

     

    Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

     git revert HEAD~2 

    相比git reset,它不会改变现在的提交历史。因此,git revert可以用在公共分支上,git reset应该用在私有分支上。

    你也可以把git revert当作撤销已经提交的更改,而git reset HEAD用来撤销没有提交的更改。

     

    from: https://zhuanlan.zhihu.com/p/32711219

    展开全文
  • 推荐文章: ...git resetgit revert :https://blog.csdn.net/yxlshk/article/details/79944535 push后: git撤销提交到远程仓库的commit git如果想撤销已经提交到远程仓库的commit,可以首先...
  • git reset --hard 和 git reset --soft用法

    千次阅读 2019-10-29 11:39:25
    有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令。 1、二者区别: git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index ...
  • git reset-----git 本地仓库回退

    万次阅读 2013-08-30 16:08:11
    git reset-----git 本地仓库回退 来源:http://www.tech126.com/git-reset/  本地仓库的回退(撤销本地的commit): git reset: reset命令有3种方式: git reset --mixed:此为默认方式,不带任何参数...
  • git 合并两个提交 - git reset --soft HEAD^

    千次阅读 2020-03-10 17:48:01
    操作方法:git reset --soft HEAD^ 执行后,git status 可以看到 a9abf66 提交的修改出现在暂存区: 再执行一次 git commit --amend 即可: 最终效果: 小结: git reset --soft HEAD^ git commit --...
  • 是没有用的,只能用git reset --hard HEAD^,这个虽然没有问题了,但是后来才发现如果在拿掉第二个PATCH的时候,这时候冲突是针对第二个PATCH的,这个还原动作,反而会把第一个PATCH给删除了,这也就是与git reset --...
  • git reset HEAD:添加错误时撤消 git reset --soft:提交错误时撤消。 提交前复出 git reset --mixed:错误提交时。 添加前复出 git reset --hard:删除提交=>删除的文件。 小心! ////// git checkout -b:创建新...
  • git 撤销操作,在使用git过程当中经常会用到撤销一些已经完成的操作,经常会用到git checkout、git resetgit revert、git commit -- amend。在用法上也有不同之处,简单的分析下这几种方法的不同。
  • `git reset` 和 `git reset --hard`区别

    万次阅读 2019-07-16 22:40:20
    git resetgit reset --hard区别 先说知识点 有时候,进行了错误的提交,但是还没有push到远程分支,想要撤销本次提交,可以使用git reset –-soft/hard命令 缺省情况 git reset缺省为git reset --soft 二者...
  • git reset git checkout . git clean -df git checkout master git pull git fetch some-remote git merge --no-commit --no-ff some-remote/fix-issue-branch git reset 在测试环境中设置远程分支很有用
  • git-troubles-源码

    2021-04-17 03:03:14
    git reset file_name HEAD 重置文件内容(对该文件的所有更改都将丢失) git checkout -- file_name 将整个存储库重置为上一次提交的状态(所有本地更改都将丢失) git reset --hard HEAD 删除最后的提交,但...
  • git reset --hard commit_id
  • Git - 回滚代码(git reset 和 get revert)

    千次阅读 2017-03-24 18:08:04
    git的工作流工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。暂存区:已经 git add xxx 进去,且未 git commit xxx 的。本地分支:已经git commit -m xxx ...
  • git reset --hard HEAD

    万次阅读 2019-04-09 20:23:37
    git reset --hard HEAD 表示回退到当前版本,HEAD指向当前版本。如果你修改了一些代码,想去除,就可以用git reset --hard HEAD一次性去除。 git reset --hard HEAD^ 表示回退到上一个版本 lj@lj-virtual-...
  • git --mixed --soft --hard之间的区别

    千次阅读 2017-07-06 11:25:16
    git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和add信息 git reset --soft:回退到某个版本,只回退了commit的信息。如果还要提交,直接...
  • git reset --hard --soft --mixed区别

    千次阅读 2018-12-14 17:53:00
    git --mixed/--hard/--soft 41e1d58739a5ab280b5b2dbde107c14aeeb0b6d2 git --soft 只是删除某次提交,再次提交直接commit即可 git --mixed 删除某次提交,并且回到add之前的状态,再次提交先add 在commit git --...
  • Git重置命令--git reset用法总结

    千次阅读 2019-01-07 11:39:33
    目录一.git reset的用法1.1 第一种用法(包含路径path)1.2 第二种用法(不使用路径path)1.2.1 参数 --hard1.2.2 参数 --soft1.2.3 参数 --mixed二.git reset --hard后如何恢复 git resetGit最常用的命令,也是...
  • Git-回退到指定版本

    万次阅读 2019-05-05 11:14:28
    方法一:git reset2.方法二:git commit --amend 1. 方法一:git reset 直接回退到指定版本,目标版本之后的提交将被删除。 情况一:“git reset --hard 版本库地址” ,拉取服务器指定提交到暂存区,该操作不...
  • git init 和git --bare init的区别

    千次阅读 2018-08-31 14:11:16
    git init 和 git --bare init 的区别在于: git init 带工作区 git --bare init 是不带工作区的,只有版本库,想要看git里面的内容只能通过git clone address的方式克隆出来 而我们在初始化远程仓库时最好使用 git...
  • git reset HEAD 是将咱暂存区和HEAD的提交保持一致 git reset --hard HEAD 是将工作区、暂存取和HEAD保持一致 测试 git reset HEAD 创建一个readme.md 的文件 创建一个commit 执行以下命令 git add ...
  • git --amend用法

    千次阅读 2020-05-28 15:16:51
    git commit --amend ...git reset --soft origin/branchname 然后重新提交 第二种办法使用–amend 这种方法觉得更简单,不用重新reset,直接修改commit信息即可。 如果不行修改信息 git commit –amend –no-e
  • 怎么撤销git add 的内容--reset

    千次阅读 2020-05-23 19:07:21
    因为git add .的命令我们经常使用,他是把文件模块暂时缓存到本地 有时候我们add之后又改了代码,所以想重新add,但是之前add但是没有commit的文件还在,想撤销怎么办呢?...git reset . 之后重新add就行了 ...
  • git----版本的跳转和修改的撤回

    千次阅读 2019-06-22 00:02:53
    git reset --hard <version>:跳转到某个版本 git reflog:用于记录每次跳转版本和提交的命令,可以查出每次的版本号 git checkout -- <flile>:将工作区的文件的修改清除 这里有两种情况: ...
  • 区别:如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录. 一、git log ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,950
精华内容 36,380
关键字:

git-reset