在开发过程中,git的版本管理越来越普及。在版本管理中,最常用和最重要的是重置提交的版本,恢复后悔做了的事。大家都知道用reset命令。但是有几种形态需要整理共享一下,也方便我自己查阅。...2、Index:在工作副本修改之后执行过git add操作的版本文件,可以commit了的。 3、Working Copy:工作副本是你正在修改,但是没有执行任何git操作的文件。...二、reset soft(更改HEAD)(恢复git commit的操作) 软重置。...2.hard(更改三者) --hard参数将会将会重置(HEAD,INDEX(STAGING),WORKING COPY),强制一致。...3.mixed(default)(恢复git add的操作,包含恢复git commit的操作) --mixed是reset的默认参数,也就是当你不指定任何参数时的参数。
总之,就是让这个文件回到最近一次git commit或git add时的状态。...reset HEAD ..." to unstage) modified: readme.txt Git同样告诉我们,用命令git reset HEAD 可以把暂存区的修改撤销掉...(unstage),重新放回工作区: $ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt git reset命令既可以回退版本...当我们用HEAD时,表示最新的版本。...场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
前言 ---- git reset 命令用于回退到指定版本,是 git 的 “后悔药” 如果创建了一个新的文件,这个文件是未跟踪的状态,那么使用 reset 回退版本时,这个新文件不会受到影响 如果创建了一个新的文件...,并且这个文件已被跟踪(已被提交到暂存区),那么使用 reset 回退版本时,这个新文件就会被删除 2....6.txt 是新文件,它的状态也不会改变,还是未跟踪状态 暂存区: 暂存区中的 2.txt 修改状态和 7.txt 的新文件状态保留 版本库: 因为 3.txt、4.txt、5.txt 是之后当前版本才加入版本库的...HEAD 的用法 ---- 回退到当前版本,下面两种用法等价 (放弃所有修改) git reset --hard git reset --hard HEAD 回退到上一个版本 git reset --hard...HEAD^ 回退到上上一个版本 git reset --hard HEAD^^ 5.
$ git reset HEAD^ --hard $ git push -f [remote] [branch] 如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了...(my-branch) $ git reset --hard HEAD^^ # four commits (my-branch) $ git reset --hard HEAD~4...# or (main) $ git checkout -f 重置某个特殊的文件, 你可以用文件名做为参数: $ git reset filename 我想丢弃某些未暂存的内容 如果你想丢弃工作拷贝中的一部分内容...把main分支重置到前一个提交: (main)$ git reset --hard HEAD^ HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的HEAD来进一步重置。...基本上, 每次HEAD的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
$ git reset HEAD^ --hard $ git push -f [remote] [branch] 如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了(...)$ git reset --hard HEAD^^ # four commits (my-branch)$ git reset --hard HEAD~4 # or (main)$ git...checkout -f 重置某个特殊的文件, 你可以用文件名做为参数: $ git reset filename 我想丢弃某些未暂存的内容 如果你想丢弃工作拷贝中的一部分内容,而不是全部。...: (main)$ git reset --hard HEAD^ HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的HEAD来进一步重置。...基本上, 每次HEAD的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
$ git reset HEAD^ --hard $ git push -f [remote] [branch] 如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化...-hard HEAD^^ # four commits (my-branch)$ git reset --hard HEAD~4 # or (main)$ git checkout -f 重置某个特殊的文件..., 你可以用文件名做为参数: $ git reset filename 我想丢弃某些未暂存的内容 如果你想丢弃工作拷贝中的一部分内容,而不是全部。...main)$ git branch my-branch 把main分支重置到前一个提交: (main)$ git reset --hard HEAD^ HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的...基本上, 每次HEAD的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
$ git reset HEAD^ --hard $ git push -f [remote] [branch] 如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化...-hard HEAD^^ # four commits (my-branch)$ git reset --hard HEAD~4 # or (main)$ git checkout -f 重置某个特殊的文件..., 你可以用文件名做为参数: $ git reset filename 我想丢弃某些未暂存的内容 如果你想丢弃工作拷贝中的一部分内容,而不是全部。...(main)$ git branch my-branch 把main分支重置到前一个提交: (main)$ git reset --hard HEAD^ HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的...基本上, 每次HEAD的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
然而,这并不足以说明一个文件在不同的工作区域所展现的状态。我认为两种状态足以表达Git中的文件,即:未跟踪(Untracked)和已跟踪(Tracked)。...后来发现其中一个文件并不需要在Git中管理,希望能够取消暂存。由于此时的文件处于Staged状态,我们只需要删掉Stage中对此文件的跟踪即可。...这时需要执行的命令是: git rm --cached README.txt 注意:此时取消暂存的文件从来就不曾提交过,也即是说没有在Git Repository留下过它的身影。...而这里的取消,其实是希望取消暂存区中已经被添加的修改内容,文件本身仍然保留在暂存区中。故而执行的命令为: git reset HEAD README.txt HEAD是何意呢?...如果确实要撤销操作,而前面的内容并不需要,在使用reset命令时,可以添加–hard参数: git reset --hard 注意:针对远程的提交记录,应尽量避免使用git reset
未跟踪) git diff : 查看未暂存的修改 git diff --cache : 查看未提交的暂存 git log --oneline : 查看提交记录 分支 分支的本质其实就是一个提交对象!!!...commithash的内容重置HEAD内容 git reset [--mixed] commithash ---> 用commithash的内容重置HEAD内容 重置暂存区 git reset -...-hard commithash ---> 用commithash的内容重置HEAD内容 重置暂存区 重置工作目录 路径reset 所有的路径reset都要省略第一步!!!...brancname 跟 git reset --hard commithash特别像 共同点 都需要重置 HEAD 暂存区 工作目录 区别...checkout对工作目录是安全的 reset --hard是强制覆盖 checkout动HEAD时不会带着分支走而是切换分支 reset --hard时是带着分支走
撤销上次 git add) $ git reset HEAD # 将 HEAD 重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改 $ git reset # 将 HEAD...重置到上一次提交的版本,并保留未提交的本地修改 $ git reset --keep # 放弃工作目录下的所有修改 $ git reset --hard HEAD # 将 HEAD...(commit),你可以: ## one commit $ git reset --hard HEAD^ ## two commits $ git reset --hard HEAD^^ ## four...commits $ git reset --hard HEAD~4 ## or $ git checkout -f 重置某个特殊的文件,你可以用文件名做为参数: git reset filename...基本上,每次 HEAD 的改变,一条新的记录就会增加到 reflog 。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
git_data]# git status 位于分支 master 尚无提交 未跟踪的文件: (使用 "git add 文件>..."...以取消暂存) 新文件: a 未跟踪的文件: (使用 "git add 文件>..."...以取消暂存) 新文件: a 新文件: b 未跟踪的文件: (使用 "git add 文件>..."...更新要提交的内容) (使用 "git checkout -- 文件>..." 丢弃工作区的改动) 删除: a 未跟踪的文件: (使用 "git add 文件>..."...以取消暂存) 删除: a 未跟踪的文件: (使用 "git add 文件>..."
答:Git跟踪并管理的是修改,而非文件。 何为修改?比如新增了一行、删除了一行、更改了某些字符、删了一些又加了一些都是修改,甚至创建一个新文件也算一个修改。...留下一个问题:如何丢弃第二次工作区的修改呢? ? 如何撤销没有add的修改? 场景:当你乱改了工作区的某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。...使用git reset hard ,用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区: ?...那么你可以直接用: git reset --hard HEAD^ //回退上个版本 不是git reset -- hard HEAD^哈 ?...注意:但是可能会影响你其他修改但是未提交的其他内容的。 ? 如何恢复工作区的文件?
执行git reset --hard +需要回滚的commit id 又可以恢复到rollback two这条提交记录。...以包含要提交的内容) .gitignore 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪) 未跟踪文件 $ git status 位于分支 master 您的分支落后...(使用 "git pull" 来更新您的本地分支) 未跟踪的文件: (使用 "git add 文件>..."...(使用 "git add" 建立跟踪) 对于未跟踪文件不想提交到暂存区。...但有时需要清理一些临时文件和自动生成的文件,手动删除显得太麻烦,这时你可以利用 git clean 命令来帮你完成这项操作 -d #删除未跟踪目录以及目录下的文件,如果目录下包含其他git仓库文件,
答:Git跟踪并管理的是修改,而非文件。 何为修改?比如新增了一行、删除了一行、更改了某些字符、删了一些又加了一些都是修改,甚至创建一个新文件也算一个修改。...留下一个问题:如何丢弃第二次工作区的修改呢? 如何撤销没有add的修改? 场景:当你乱改了工作区的某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。...gitcheckout -- file gitcheckout -- file 使用git reset hard ,用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage...那么你可以直接用: git reset --hard HEAD^ //回退上个版本 不是git reset -- hard HEAD^哈 ?...注意:但是可能会影响你其他修改但是未提交的其他内容的。 如何恢复工作区的文件?
init 把这个目录变成git可以管理的仓库 git init 创建成功后当前文件夹下会多一个.git的目录,这个目录是Git来跟踪管理版本的 所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件...查看文件有没有被纳入版本控制当中 创建一个html touch index.html git status index.html #查看这个html的状态 查看是否还有文件未提交 git status...#查看是否还有文件未提交 将文件添加到控制列表中 把文件添加到暂存区。...git log --oneline #查看简略信息 --oneline参数可以将每条日志的输出为一行 回退到以前的版本 git reset --hard HEAD^ #回到上一个版本 git...reset --hard HEAD^^ #回到上上一个版本 git reset --hard HEAD~100 #回到100版本 回退到最新的版本 git reset --hard 版本号
git初入门(二):文件操作 篇幅较长,可收藏防止迷路 0. 文件的四种状态 图片 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到 git 库, 不参与版本控制....stage了,就先需要从stage中撤销 git reset HEAD ... 7. git clean # 移除所有未跟踪文件 # 一般会加上参数-df,-d表示包含目录,-f表示强制清除...(也就是,HEAD^=HEAD1,HEAD^^=HEAD~2) git reset --hard HEAD^ git reset --hard HEAD~1 git reset --59cf9334cf957535cb328f22a1579b84db0911e5...- 在reset后, C2 所做的变更还在,但是处于未加入暂存区状态(可以通过`git reflog`查看日志文件查看记录,通过commit id|HEAD指针编号,`git reset --hard...删除文件 □ 删除未跟踪文件 如果文件还是未跟踪状态,直接删除文件就可了,bash 中使用 rm 可以删除文件,示例如下: $ git status On branch master Untracked
git操作一般分为三个阶段:图片工作目录文件系统中实际文件的状态,可以跟踪或取消跟踪,可以更改或删除。...git stash -U [stash] 存储更改添加未跟踪的文件 git log --since="1 weeks.../文件夹 - 撤消 git add git reset HEAD {file} 撤消添加命令,将更改的文件保留在工作目录中...git reset HEAD 撤消所有添加的文件,将更改保留在工作目录中 git...git reset HEAD~1 --hard 撤消最后一次提交,丢弃所有更改 git reset
撤销上次git add) $ git reset HEAD # 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改 $ git reset # 将HEAD重置到上一次提交的版本...,并保留未提交的本地修改 $ git reset --keep # 放弃工作目录下的所有修改 $ git reset --hard HEAD # 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改...git stash -k git reset --hard git stash pop git add -A 未暂存(Unstaged)的内容 我想把未暂存的内容移动到一个新分支 git checkout...HEAD~4 ## or (master)$ git checkout -f 重置某个特殊的文件, 你可以用文件名做为参数: git reset filename 我想丢弃某些未暂存的内容 如果你想丢弃工作拷贝中的一部分内容...基本上, 每次 HEAD 的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。
撤销上次git add) $ git reset HEAD # 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改 $ git reset # 将HEAD重置到上一次提交的版本...,并保留未提交的本地修改 $ git reset --keep # 放弃工作目录下的所有修改 $ git reset --hard HEAD # 将HEAD重置到指定的版本,并抛弃该版本之后的所有修改...$ git stash -k $ git reset --hard $ git stash pop $ git add -A 未暂存(Unstaged)的内容 我想把未暂存的内容移动到一个新分支 $...)$ git reset --hard HEAD~4 ## or (master)$ git checkout -f 重置某个特殊的文件, 你可以用文件名做为参数: $ git reset filename...基本上, 每次 HEAD 的改变, 一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。