學習操作HEAD指針,具體如下:
- 查看Git版本信息
- 移動指針
- 通過移動HEAD指針恢復數據
- 合並版本
拓撲圖:
方案: HEAD指針是一個可以在任何分支和版本移動的指針,通過移動指針我們可以將數據還原至任何版本。
每做一次提交操作都會導致git更新一個版本,HEAD指針也跟着自動移動
1. 對數據倉庫進行一些修改、提交操作,以產生多個版本,為后面的驗證做准備
[root@web2 ~]# git clone root@192.168.2.100:/var/git/project
[root@web2 ~]# cd project
[root@web2 project]# git pull
[root@web2 project]# git status
[root@web2 project]# echo "new file" > new.txt #寫入數據
[root@web2 project]# git add .
[root@web2 project]# git commit -m "add new.txt"
[root@web2 project]# echo "first" >> new.txt #寫入數據
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:first line"
[root@web2 project]# echo "second" >> new.txt #寫入數據
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:second"
[root@web2 project]# echo "123" > num.txt #寫入數據
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:123"
......
2. 查看Git版本信息
[root@web2 project]# git reflog
[root@web2 project]# git log --oneline #查看Git版本信息
04ddc0f num.txt:789
7bba57b num.txt:456
301c090 num.txt:123
b427164 new.txt:third
0584949 new.txt:second
ece2dfd new.txt:first line
e1112ac add new.txt
3. 移動HEAD指針,將數據還原到任意版本. 提示,當前HEAD指針為HEAD@{0}
[root@web2 project]# git reset --hard 301c0 #恢復到版本301c0
[root@web2 project]# git reflog
301c090 HEAD@{0}: reset: moving to 301c0
04ddc0f HEAD@{1}: commit: num.txt:789
7bba57b HEAD@{2}: commit: num.txt:456
301c090 HEAD@{3}: commit: num.txt:123
b427164 HEAD@{5}: commit: new.txt:third
0584949 HEAD@{6}: commit: new.txt:second
ece2dfd HEAD@{7}: commit: new.txt:first line
e1112ac HEAD@{8}: commit: add new.txt
1a0d908 HEAD@{9}: commit (initial): 初始化
[root@web2 project]# cat num.txt #查看文件是否為123
123
[root@web2 project]# git reset --hard 7bba57b
[root@web2 project]# cat num.txt #查看文件是否為123,456
123
456
[root@web2 project]# git reflog #查看指針移動歷史
7bba57b HEAD@{0}: reset: moving to 7bba57b
301c090 HEAD@{1}: reset: moving to 301c0
...
[root@web2 project]# git reset --hard 04ddc0f #恢復num.txt的所有數據
4. 模擬誤刪后的數據還原操作
[root@web2 project]# git rm init.txt
rm 'init.txt' #刪除文件
[root@web2 project]# git commit -m "delete init.txt" #提交本地倉庫
[root@web2 project]# git reflog #查看版本歷史
0dc2b76 HEAD@{0}: commit: delete init.txt #有刪除init.txt的記錄
7bba57b HEAD@{0}: reset: moving to 7bba57b
301c090 HEAD@{1}: reset: moving to 301c0
...
[root@web2 project]# git reset --hard 04ddc0f #恢復數據
[root@web2 project]# ls
demo init.txt new.txt num.txt
結束.