當前位置:首頁 » 經典版本 » git回滾到指定版本
擴展閱讀
天成解說一個人的游戲 2021-03-16 21:51:02
打游戲什麼牌子顯卡好 2021-03-16 21:51:00

git回滾到指定版本

發布時間: 2021-02-27 04:41:18

A. git如何回退到某個版本

1. 使用git log命令查看所有的歷史版本,獲取某個歷史版本的id,假設查到歷史版本的id是。
2.使用命令
git reset --hard

3. 把修改推到遠程伺服器

git push -f -u origin master

B. git 回滾到某個版本還能回來嗎

可以的,您需要做的是如下幾件事:

  1. 找到您要回滾到的提交編號

    git reflog

  2. 回滾

    git reset --hard yourCommitNum

C. 如何使用git回滾版本到分支中的某一個commit時間點

git reset [commit 哈希復值]

但是這樣製做只能把本地分支回滾到該commit上,遠程分支還在原來的地方。

可以這樣操作:在你想要回滾的commit上另外建一個新分支,然後git checkout [該分支],然後把原來的分支刪除掉,git branch -d [老分支]可以刪除本地的老分支,同樣,遠程分支還是老狀態,可以git push origin :[老分支],把遠程的老分支刪除,這樣你需要回滾的commit之後的信息在本地和遠程都徹底消滅了(慎重,確保你真的不要這些信息了哦)。而你需要回滾的commit之前的信息全部保存了,只不過是分支名字換了一下,你也可以把分支改名回來。這時遠程的新分支還不存在,你之後又改動commit並且push之後,遠程也和本地同步上了。

D. 如何用 Git 將代碼恢復到一個歷史的版本

有些時候,在一些特殊情況下,我們需要將代碼恢復到一個歷史的提交版本上。而這個歷史提交版本,離最新的提交已經比較久遠了。
比如,我希望將如下的倉庫的提交,恢復到上上上上次提交。當然,我可以一次一次的 revert,但是有沒有更快更簡單的辦法呢?

暴力的方式
如果你的倉庫是自己在用(不影響別人),那麼你可以使用 git reset --hard <target_commit_id> 來恢復到指定的提交,再用 git push -f 來強制更新遠程的分支指針。為了保證萬一需要找回歷史提交,我們可以先打一個 tag 來備份。
對於剛剛的例子,需要執行的命令就是:
// 備份當前的分支到 backup_commit
git tag backup_commit
git push origin backup_commit
// 重置 source 分支
git reset --hard 23801b2
// 強制 push 更新遠程分支
git push origin source -f

溫和的方式
如果你的倉庫是多人在協作,那麼你這么操作會使用別人本地的代碼庫混亂,所以只能建一個新的提交,這個新的提交中把想取消的提交都 revert 掉,那麼具體應該如何做呢?方法如下:
首先,和剛剛一樣,用 git reset --hard 23801b2 將代碼切換到目標提交的 id。接下來,用 git reset --soft origin/source 命令,將當前代碼切換回最新的提交。
執行完上面兩步後,你的倉庫還是最新的提交,但是工作區變成了歷史的提交內容,這個時候用 git add 和 git commit 即可。最終完成的效果如下:

不過經過念茜的提醒,該方法需要保證 reset 的時候沒有別人做新的提交,如果有的話,會一並把別人的提交也撤銷了。所以還是挺危險的,慎用。
雖然用到的時候很少,但是理解它的原理有助於大家理解 Git 的工作區,暫存區和版本庫的各種指針操作的意義,希望對大家有用。

E. git reset回退版本後怎麼恢復到當前版本

可以使用git reflog 命令查看本地的操作記錄
b7057a9 HEAD@{0}: reset: moving to b7057a9

98abc5a HEAD@{1}: commit: more stuff added to foo

b7057a9 HEAD@{2}: commit (initial): initial commit
然後使用$ git reset --hard 98abc5a回到98abc5a對應的那次commit

F. git回滾歷史版本後面版本的數據還在嗎

git回滾歷史版本後面版本的數據還在
下面詳細介紹這些函數。
1. csvread、csvwrite
csvread函數的調用格式如下:
● M = csvread('filename'),將文件filename中的數據讀入,並且保存為M,filename中只能包含數字,並且數字之間以逗號分隔。M是一個數組,行數與filename的行數相同,列數為filename列的最大值,對於元素不足的行,以0補充。
● M = csvread('filename', row, col),讀取文件filename中的數據,起始行為row,起始列為col,需要注意的是,此時的行列從0開始。
● M = csvread('filename', row, col, range),讀取文件filename 中的數據,起始行為 row,起始列為col,讀取的數據由數組 range 指定,range 的格式為:[R1 C1 R2 C2],其中R1、C1為讀取區域左上角的行和列,R2、C2為讀取區域右下角的行和列。
csvwrite 函數的調用格式如下:
● csvwrite('filename',M),將數組M中的數據保存為文件filename,數據間以逗號分隔。
● csvwrite('filename',M,row,col),將數組M中的指定數據保存在文件中,數據由參數 row和col指定,保存row和col右下角的數據。
● csvwrite寫入數據時每一行以換行符結束。另外,該函數不返回任何值。

G. linux git 怎樣退回到指定版本

無論windows還是linux或其他操作系統,git版本管理的操作命令都是一致的,沒有任何區別。
退回到指定版本可使用revert反轉提交命令,git revert用一個新提交來消除一個歷史提交所做的任何修改。revert 之後你的本地代碼會回滾到指定的歷史版本,這時你再 git push 既可以把線上的代碼更新。

H. git reset退回指定版本後,怎麼提交上伺服器

這些開發中很常見的問題,所以git的取消提交,回退甚至返回上一版本都是特別重要的.
大致分為下面2種情況:

1.沒有push
這種情況發生在你的本地代碼倉庫,可能你add ,commit 以後發現代碼有點問題,准備取消提交,用到下面命令
reset
git reset [--soft | --mixed | --hard

上面常見三種類型

--mixed
會保留源碼,只是將git commit和index 信息回退到了某個版本.
git reset 默認是 --mixed 模式
git reset --mixed 等價於 git reset

--soft
保留源碼,只回退到commit 信息到某個版本.不涉及index的回退,如果還需要提交,直接commit即可.

--hard
源碼也會回退到某個版本,commit和index 都回回退到某個版本.(注意,這種方式是改變本地代碼倉庫源碼)
當然有人在push代碼以後,也使用 reset --hard <commit...> 回退代碼到某個版本之前,但是這樣會有一個問題,你線上的代碼沒有變,線上commit,index都沒有變,當你把本地代碼修改完提交的時候你會發現權是沖突.....
所以,這種情況你要使用下面的方式

2.已經push
對於已經把代碼push到線上倉庫,你回退本地代碼其實也想同時回退線上代碼,回滾到某個指定的版本,線上,線下代碼保持一致.你要用到下面的命令

revert
git revert用於反轉提交,執行evert命令時要求工作樹必須是干凈的.
git revert用一個新提交來消除一個歷史提交所做的任何修改.
revert 之後你的本地代碼會回滾到指定的歷史版本,這時你再 git push 既可以把線上的代碼更新.(這里不會像reset造成沖突的問題)

revert 使用,需要先找到你想回滾版本唯一的commit標識代碼,可以用 git log 或者在adgit搭建的web環境歷史提交記錄里查看.
git revert

通常,前幾位即可
git revert c011eb3

git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit
看似達到的效果是一樣的,其實完全不同.
第一:
上面我們說的如果你已經push到線上代碼庫, reset 刪除指定commit以後,你git push可能導致一大堆沖突.但是revert 並不會.
第二:
如果在日後現有分支和歷史分支需要合並的時候,reset 恢復部分的代碼依然會出現在歷史分支里.但是revert 方向提交的commit 並不會出現在歷史分支里.
第三:
reset 是在正常的commit歷史中,刪除了指定的commit,這時 HEAD 是向後移動了,而 revert 是在正常的commit歷史中再commit一次,只不過是反向提交,他的 HEAD 是一直向前的.

I. 如何使用git回滾版本到分支中的某一個commit

git reset [commit 哈希值]

但是這樣做只能把本地分支回滾到該commit上,遠程分支還在原來的地方。

可以這樣操作:在你想要回滾的commit上另外建一個新分支,然後git checkout [該分支],然後把原來的分支刪除掉,git branch -d [老分支]可以刪除本地的老分支,同樣,遠程分支還是老狀態,可以git push origin :[老分支],把遠程的老分支刪除,這樣你需要回滾的commit之後的信息在本地和遠程都徹底消滅了(慎重,確保你真的不要這些信息了哦)。而你需要回滾的commit之前的信息全部保存了,只不過是分支名字換了一下,你也可以把分支改名回來。這時遠程的新分支還不存在,你之後又改動commit並且push之後,遠程也和本地同步上了。