在test
文件中随意改动,然后提交
git commit -a -m "意外改动"
git log
,增加了一条纪录:
commit d9b03125921d20482937f43ea0bdbfbfb7fe1745 Author: kardinal <[email protected]> Date: Wed Nov 5 15:18:49 2008 +0800 意外改动
使用git reset命令回溯到历史版本:
git reset HEAD^ git log git diff
git reset 默认使用--mixed选项 |
|
HEAD 表示当前版本,HEAD^ 表示前一个版本,HEAD^^ 表示前两个版本,HEAD~4 表示前四个版本;也可以使用“版本标签”或“版本ID”来指定版本(只要前几位就可以了) |
|
可以看到版本纪录中最后一次提交已经取消 | |
可以看到,--mixed选项回溯到提交到索引之前的状态 |
git reset --soft回溯到已提交到索引但未提交到版本库的状态
git commit -a -m "意外改动" git reset --soft HEAD^ git log git diff git diff --cached
注意 | |
---|---|
|
以上方法回溯到历史版本,只是回溯版本库和索引的纪录,而文件的内容并不会回溯到之前的状态,使用git reset --hard命令,将文件内容也一同回溯
git commit -a -m "意外改动"
git reset --hard HEAD^
git log
git diff --cached
cat test
--hard选项存在一定风险,因为很多情况下,你不能确定内容算不算“意外改动”。这时,可以新建一个分支,在这个分支中进行回溯,处理完成后合并两个分支,参见“分支管理”一节