Git回退

【Git回退】?Git中回退有几种情况,如下:
?①对文件修改,但是修改未存入暂存区(这次修改也未提交)。
??此时只需将工作区的修改 抹掉 即可。使用git checkout 文件名。命令之后的文件内容就是 修改之前的内容。
?②(暂存区存放的是文件的修改信息)对已经存在暂存区的文件进行了修改,需要抹掉的是 暂存区修改之上的修改 。这里比较绕口。

文件 one.txt 内容是one 此时 在文件中插入一行two,并且执行了add 命令。 暂存区就是存储了此次修改的信息。 此时 又对文件插入了一行 three。此时就是相当于在修改之上就行了修改。此时git status 控制台会输出 On branch master Changes to be committed: (use "git reset HEAD ..." to unstage)modified:one.txt //已经存在与暂存区的修改----> 就是上述的插入的twoChanges not staged for commit: //未存入暂存区的修改 (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory)modified:one.txt//未存入暂存区的修改 就是上述的插入 three此时git checkout one.txt 就会将未存入暂存区的修改 抹掉(就是将 插入的three 抹掉)

?③文件进行了修改,并且使用了add 命令 将其存入了暂存区(未提交)。
??那么取消修改就需要两步:第一,将暂存区的修改信息清除(reset)。第二,取消实际的修改(checkout)
git reset HEAD one.txt //清楚了已存入暂存区的修改 git chenkout one.txt //删除工作区中本次的修改

?④Git可以将commit回退至指定的版本。使用的命令如下
git reset --hard HEAD^有几个^就回退几个commitgit reset --hard HEAD~数字数字是几就回退几个commitgit reset --hard HEAD commit_id 回退至指定的commit

?⑤git reflog可以查看操作记录
2ba4947 HEAD@{0}: reset: moving to HEAD^ // commit_id 操作数 操作名字和具体操作 9bec1ea HEAD@{1}: commit: add two 2ba4947 HEAD@{2}: commit: init d35472d HEAD@{3}: reset: moving to d3547 e5f6212 HEAD@{4}: reset: moving to HEAD~2 d35472d HEAD@{5}: reset: moving to d3547 409954c HEAD@{6}: reset: moving to HEAD^^ aca02d6 HEAD@{7}: reset: moving to HEAD^ d35472d HEAD@{8}: commit: add a third line aca02d6 HEAD@{9}: commit: add second line e5f6212 HEAD@{10}: commit: add a new line 409954c HEAD@{11}: commit (initial): initial commit

    推荐阅读