git回退版本

git的文件狀態說明

這裏寫圖片描述

  1. git checkout -- files
    把文件從暫存區域或歷史記錄中複製到工作目錄,用來丟棄本地修改。
  2. git reset -- files
    用來撤銷最後一次git add files,你也可以用git reset 撤銷所有暫存區域文件。
  3. git reset [option] commitid
    用來撤銷歷史記錄,option選項–soft,–hard,–mixed。
    這裏寫圖片描述
    1. –soft隻影響歷史記錄;
    2. –mixed影響歷史記錄,暫存區;
    3. –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`
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章