git 撤销与修改(附加 文件的三种状态)

git 在本地有三个概念:工作区、暂存区、本地分支

一、首先讲讲git中 本地文件的三种状态:

使用git status可以查看文件的状态

1、Untracked files

即未跟踪的状态,这是文件的初始状态,也就是在工作区中的状态,就是说git不知道你这个文件的信息,没有生成快照

2、Changes to be committed

即文件在暂存区中生成了快照等待被提交(commit)

3、Changes not staged for commit

即文件生成过快照,但是有有了新的修改,并且没有生成新的快照

状态转换:

1)Untracked files --> Changes to be committed

使用:git add 文件名   或者   git add .

含义:将工作区的某个文件、某些文件、或者是所有文件,所作出的修改(新建、删除也算的),添加至暂存区,此时文件就可以被git commit了。

2)Changes to be committed --> Untracked files

使用:git rm --cached 文件名

含义:将文件从暂存状态转换为未暂存状态

3)Changes to be committed --> Changes not staged for commit

使用:当某个文件已经git add过了,此时如果再进行修改,使用git status查看文件状态的时候,就处于Changes not staged for commit,意思是修改的部分没有生成快照,不能提交。

二、撤销

1、场景:将该文件在工作区中的修改,全部撤销,返回到最近一次git commit或者git add时的状态

git checkout -- 文件名

1)如果,文件没有被git add过,即没有生成过快照,那么使用此命令就撤销到了和版本库一致的状态了

2)如果,文件被git add过后,又修改了,即曾经生成过快照,那么使用此命令撤销到之前git add后的暂存区时的状态。

2、场景:撤销暂存区的修改,将文件重新放回工作区

git reset HEAD 文件名

git reset既可以用在版本回退,也可以用在撤销暂存区的修改,将文件重新放回工作区,HEAD代表此前的最新版本;

接下来就可以使用1)中的方法,将工作区中的修改撤销了。

3、提交到本地分支上的回退

如果,修改的文件已经使用了git commit提交到了本地分支,那么可以采用版本回退,回到之前的版本

1)使用,git reset --hard HEAD^回退到上一个版本(HEAD为当前版本、HEAD^为上一个版本、HEAD^^为上上个版本,以此类推)。

2)或者使用 git log --pretty=online 查看版本号记录

git reset --hard 版本号

4、提交到远程分支,就只能强行覆盖了,要么是远程分支覆盖本地、要么是本地覆盖远程

远程分支覆盖本地:https://blog.csdn.net/qq_36898043/article/details/81449752

本地覆盖远程不推荐使用,一般是回滚到之前的commit历史记录,然后再push到远程分支

猜你喜欢

转载自blog.csdn.net/qq_36898043/article/details/81460287