您的位置:首页 > 其它

git回退版本

2017-06-04 20:03 211 查看

git的文件状态说明



git checkout -- files


把文件从暂存区域或历史记录中复制到工作目录,用来丢弃本地修改。

git reset -- files


用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。

git reset [option] commitid


用来撤销历史记录,option选项–soft,–hard,–mixed。



–soft只影响历史记录;

–mixed影响历史记录,暂存区;

–hard影响历史记录,暂存区,工作目录;

实例说明

假如git项目中有三个文件a.txt,b.txt,c.txt,目前处于已提交状态

当前a.txt的内容为

a.txt is a git file




1. 回退修改的文件(未add)

编辑a文件后

a.txt is a git file, i found something is wrong


发现写错了,想撤回到未修改之前,执行命令

git checkout -- a.txt


a.txt的内容重新变成了

a.txt is a git file


2. 回退已add到暂存区的文件(未commit)

继续修改a.txt,内容最终为

a.txt is a git file, i want commit it


执行命令

git add a.txt


突然任性不想提交这个内容了,怎么办

回退执行命令

git reset --hard


a.txt的内容重新变成了

a.txt is a git file


这里有一个问题,假如同时修改了a.txt,b.txt两个文件,执行上面的命令也会把b.txt回退,如果这种情况可以:

git reset
只会清空暂存区,并不影响工作目录

git checkout -- a.txt
从历史记录把a.txt复制到工作目录,就可以单独回退a.txt了

3. 回退已commit的文件

当天小酌了一杯,不小心把a.txt

a.txt is a git file, i want commit it


提交了。

git add a.txt
git commit -m "a.txt commit"


回退执行命令

git reset --hard HEAD~1


谢天谢地,a.txt又回到了

a.txt is a git file


这里同样有一个问题,假如同时提交了a.txt,b.txt两个文件,执行上面的命令也会把b.txt回退,如果这种情况可以:

git reset HEAD~1
历史版本回退,历史版本复制一份到暂存区,并不影响工作目录

git checkout -- a.txt
从暂存区把a.txt复制到工作目录

最后把b.txt重新提交下

git add b.txt
git commit -m "回退a.txt"


如果不想回退了,回到回退之前的版本

查看回退之前的版本号commitid

git reflog
假如为如6558aa6

回到回退之前的版本

git reset --hard 6558aa6


回退中间某些提交

例如 E—F—G—H—I—J topicA,回退G的这次提交记录,可以执行

git rebase --onto F H J


4. 回退到某个时间段

git checkout `git rev-list -n 1 --before="2017-08-27 13:37" master`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git 回退 reset checkout