導航:首頁 > 版本升級 > git回到上一個版本

git回到上一個版本

發布時間:2023-05-22 05:29:22

『壹』 git 怎麼把一個文件回退成上一個版本

git
最小單位是一個提交,因此是不能單獨回退某個文件的。當然,如果有個提交只修改了一個文件,就可以回退,git
revert這個提交就可以了。

『貳』 git下載歷史版本

1.git 獲取歷史版本的幾種方式

我們簡單的描述一個例子:a)初始化操作有兩個文件file1.txt和file2.txt1, 初始化的時候就有這兩個文件操作:git initgit statusgit add .git mit -m 「init version」2, 在master分支上修改了file1.txt,並提交操作:(修改file1.txt)git add file1.txtgit mit -m 「change file1」3, 然後新建分支banana,並切換到banana分支上操作:git branch bananagit checkout banana4, 修改file1.txt和file2.txt,並提交。

操作:(修改file1.txt和file2.txt)git add file1.txt file2.txtgit mit -m 「change by banana」這個時候,我們可以輸入 gitk,查看一下當前的版本情況。如下圖:蠢悄派git-0015, 然後,切換到master分支上,修改file2.txt,並提交。

操作:git checkout master(修改file2.txt)git add file2.txtgit mit -m 「change by master」輸入gitk,查看當前版本情況,如下圖:git-002b)發現問題需要查看歷史版本我們現在發現當前的版本有點問題,還不能提交到版本庫。1,我們需要從git mit中返回.則輸入:git reset --soft HEAD^解釋一下,HEAD是當前分支的最新版本。

^表示父節點。當前節點的父節點,就是上一次提交的版本。

也就是標記為「change file1」的版本。問為什麼不是」change by banana」這個版本呢?不同的分支哦。」

change by banana」是banana分支的最新代碼,和master分支不同的。這個時候輸入git status看看,是不是顯示file2.txt修改了沒有提交呢。

2,我們需要從git add中返回再仔細查看之後,我們發現file2.txt真的寫錯了,需要返回到git add之前的狀態。輸入:git reset -q file2.txt這個時候,file2.txt就回到了解放前了。

用git status查看一下,file2.txt是」change not staged for mit」狀態。3,回到沒有做過的情況我們最終確定,最後一次修改的file2.txt是無用的代碼,我們需要廢棄掉。

注意,這個操作不能恢復的哦。git reset --hard這個命令,不能指定具體的文件。

是把當前的修改全部清除,恢復到最後一次提交的版本。這個時候,用gitk查看一下:git-003已經徹底回復到了「change file 1」的版本了。

4,直接回復到某個版本我們現在切換到banana分支。git checkout banana然後用gitk看一下。

可以看出,我們之前的操作,對banana分支一點影響也沒有。現在我們需要把banana分支回復到初始狀態,但是當前的改動的代碼還是需要留著。

我們可以看,init版本是當前版本的父節點的父節點。我們可以這么操作:git reset --soft HEAD^^然後用gitk看一下:git-004最近的版本已經變成了init version了。

所有的改動都是add未提交狀態。5,得到當前最新代碼最後。

我們把file1.txt和file2.txt都刪掉。我們需要從版本庫中取得當前最新的代碼。

很簡單:git checkout master如果是要banana分支的最新代碼,則:git checkout banana以上的操作,我們知道了如何查看版本分支,和如何回復運冊到以前的版本。

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

有些時候,在一些特殊情況下,我們需要將代碼恢復到一個歷史的提交版本上。

而這個歷史提交版本,離最新的提交已經比較久遠了。比如,我希望將如下的倉庫的提交,恢復到上上上上次提交。

當然,我可以一次一次的帶賀 revert,但是有沒有更快更簡單的辦法呢?暴力的方式如果你的倉庫是自己在用(不影響別人),那麼你可以使用 git reset --hard 來恢復到指定的提交,再用 git push -f 來強制更新遠程的分支指針。為了保證萬一需要找回歷史提交,我們可以先打一個 tag 來備份。

對於剛剛的例子,需要執行的命令就是:// 備份當前的分支到 backup_mitgit tag backup_mitgit push origin backup_mit// 重置 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 mit 即可。最終完成的效果如下:不過經過念茜的提醒,該方法需要保證 reset 的時候沒有別人做新的提交,如果有的話,會一並把別人的提交也撤銷了。

所以還是挺危險的,慎用。雖然用到的時候很少,但是理解它的原理有助於大家理解 Git 的工作區,暫存區和版本庫的各種指針操作的意義,希望對大家有用。

3.git 代碼上傳後,怎麼回退版本

總有一天你會遇到下面的問題.

(1)改完代碼匆忙提交,上線發現有問題,怎麼辦? 趕緊回滾.

(2)改完代碼測試也沒有問題,但是上線發現你的修改影響了之前運行正常的代碼報錯,必須回滾.

這些開發中很常見的問題,所以git的取消提交,回退甚至返回上一版本都是特別重要的.

大致分為下面2種情況:

1.沒有push

這種情況發生在你的本地代碼倉庫,可能你add ,mit 以後發現代碼有點問題,准備取消提交,用到下面命令

reset

git reset [--soft | --mixed | --hard

上面常見三種類型

--mixed

會保留源碼,只是將git mit和index 信息回退到了某個版本.

git reset 默認是 --mixed 模式

git reset --mixed 等價於 git reset

--soft

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

--hard

源碼也會回退到某個版本,mit和index 都 *** 退到某個版本.(注意,這種方式是改變本地代碼倉庫源碼)

當然有人在push代碼以後,也使用 reset --hard <mit。>; 回退代碼到某個版本之前,但是這樣會有一個問題,你線上的代碼沒有變,線上mit,index都沒有變,當你把本地代碼修改完提交的時候你會發現權是沖突。..

所以,這種情況你要使用下面的方式

2.已經push

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

revert

git revert用於反轉提交,執行evert命令時要求工作樹必須是干凈的.

git revert用一個新提交來消除一個歷史提交所做的任何修改.

revert 之後你的本地代碼會回滾到指定的歷史版本,這時你再 git push 既可以把線上的代碼更新.(這里不會像reset造成沖突的問題)

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

git revert

通常,前幾位即可

git revert c011eb3

git revert是用一次新的mit來回滾之前的mit,git reset是直接刪除指定的mit

看似達到的效果是一樣的,其實完全不同.

第一:

上面我們說的如果你已經push到線上代碼庫, reset 刪除指定mit以後,你git push可能導致一大堆沖突.但是revert 並不會.

第二:

如果在日後現有分支和歷史分支需要合並的時候,reset 恢復部分的代碼依然會出現在歷史分支里.但是revert 方向提交的mit 並不會出現在歷史分支里.

第三:

reset 是在正常的mit歷史中,刪除了指定的mit,這時 HEAD 是向後移動了,而 revert 是在正常的mit歷史中再mit一次,只不過是反向提交,他的 HEAD 是一直向前的.

4.git怎麼創建本地版本倉庫

我們都知道,使用git的好處是可以很好地對項目版本進行控制。

我們可以很清楚地看到修改了哪些代碼,並可以恢復到我們想要的版本。

使用的話,平常我們都是先將改動的代碼提交到本地倉庫,再推送到遠程倉庫。

那如果我們不需要推送到遠程倉庫,只需要在本地倉庫進行管理呢?

最近就在做項目時,需要建立本地倉庫。

於是上網查了下資料,找到了建立本地git倉庫的方法,下面簡單描述一下:

1、在項目的根目錄下,使用git init 命令創建一個版本庫。執行過後會發現根目錄下多了一個.git的目錄。

其中包括許多的空文件。比如:

config # 項目的配置信息

description # 項目的描述信息

HEAD # 項目當前在哪個分支的信息

hooks/ # 默認的「hooks」 腳本文件

index # 索引文件,git add 後把要添加的項暫存到這里

info/ # 裡面有一個exclude文件,指定本項目要忽略的文件 #

logs/ # 各個refs的歷史信息

objects/ # 這個目錄非常重要,裡面存儲都是Git的數據對象

2、本地倉庫創建成功後,使用git add 命令。把當前目錄下的所有文件全部添加到暫存區。

3、再使用git mit 命令,將文件提交到本地倉庫。

至此,本地倉庫創建成功。當本地的源文件改動時,只需要再添加、提交到本地倉庫即可。

使用git log 命令,可以看出有哪些內容被提交了。

甚至可以恢復到想要恢復的版本,這樣及再也不用擔心代碼不能恢復的情況了。

『叄』 Git怎麼還原上一個版本

第一步: git log 查看之前的commit的id,找到想要還原的版本
第二步: git reset --hard 還原到之前的某個版本
第三步: git push -f origin master 強制回push到遠程

前兩步在eclipse中也可答操作:

team --> show in hostory

找到想還原的版本


然後再強制push (git push -f origin master)

『肆』 intellij idea用git怎麼退回上個版本

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

『伍』 git獲取歷史版本的幾種方式

我們簡單的描述一個例子:

a)初始化操作

有兩個文件file1.txt和file2.txt

1, 初始化的時候就有首配這兩個文件

操作:

git init

git status

git add .

git mit -m 「init version」

2, 在master分支上修改了file1.txt,並提交

操作:

(修改file1.txt)

git add file1.txt

git mit -m 「change file1」

3, 然後新建分支banana,並切換到banana分支上

操作:

git branch banana

git checkout banana

4, 修改file1.txt和file2.txt,並提交。

操作:

(修改file1.txt和file2.txt)

git add file1.txt file2.txt

git mit -m 「change by banana」

這個時候,我們可以輸入 gitk,查看一下當前的版本情況。

如下圖:git-001

5, 然後,切換到master分支上,修改file2.txt,並提交。

操作:

git checkout master

(修改file2.txt)

git add file2.txt

git mit -m 「change by master」

輸入gitk,查看當前版本情況,如下圖:git-002

b)發現問題需要查看歷史版本

我們現在發現當前的版本有點問題,還不能提交到版本庫。

1,我們需要從git mit中返回.

則輸入:

git reset --soft HEAD^

解釋一下,HEAD是當前分支的最新版本。

^表示父節點。

當前節點的父節點,就是上一次提交的版本。

也就是標記為「change file1」的版本。

問為什麼不是」change by banana」這個版本呢者扒指?不同的分支哦。

」change by banana」是banana分支的最新代碼,和master分支不同的。

這個時候輸入

git status

看看,是不是顯示file2.txt修改了沒有提交呢。

2,我們需要從git add中返回

再仔細查看之後,我們發現file2.txt真的寫錯了,需要返回到此悔git add之前的狀態。

輸入:

git reset -q file2.txt

這個時候,file2.txt就回到了解放前了。

用git status查看一下,file2.txt是」change not staged for mit」狀態。

3,回到沒有做過的情況

我們最終確定,最後一次修改的file2.txt是無用的代碼,我們需要廢棄掉。

注意,這個操作不能恢復的哦。

git reset --hard

這個命令,不能指定具體的文件。

是把當前的修改全部清除,恢復到最後一次提交的版本。

這個時候,用gitk查看一下:git-003

已經徹底回復到了「change file 1」的版本了。

4,直接回復到某個版本

我們現在切換到banana分支。

git checkout banana

然後用gitk看一下。

可以看出,我們之前的操作,對banana分支一點影響也沒有。

現在我們需要把banana分支回復到初始狀態,但是當前的改動的代碼還是需要留著。

我們可以看,init版本是當前版本的父節點的父節點。

我們可以這么操作:

git reset --soft HEAD^^

然後用gitk看一下:git-004

最近的版本已經變成了init version了。

所有的改動都是add未提交狀態。

5,得到當前最新代碼

最後。

我們把file1.txt和file2.txt都刪掉。

我們需要從版本庫中取得當前最新的代碼。

很簡單:

git checkout master

如果是要banana分支的最新代碼,則:

git checkout banana

以上的操作,我們知道了如何查看版本分支,和如何回復到以前的版本。

『陸』 git怎樣回退到上一個

這些開發中很常見的問題,所以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 是一直向前的.

『柒』 git 還原某個文件到之前的版本

場景: 對於修改了 Git 控制下的某個文件,但是不滿意,想回退到之前的版本。假定該文件為含滲 src/main/main.c

解決方法:

第一步: 得到該文件的commit 歷史

第二步: 復制需要回退版本的hash

第三步:檢出彎叢對應版本,格式為: git checkout <談鬧脊hash> <filename>

第四步: 提交檢出下來的版本。

『捌』 如何用 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 的工作區,暫存區和版本庫的各種指針操作的意義,希望對大家有用。

『玖』 63.Git Reset 詳解版本回滾的三種模式

意思就是可以讓HEAD這個指針指向其他版本。說白了就是通過此命令在版本之間進行穿梭。
它有三種模式,soft,mixed,hard,具體的使用方法下面這張圖,展示的很全面了。

這三個模式理解了,對於使用這個命令很有幫助。在理解這三個模悔敬簡式之前,需要略微知道一點Git的基本流程。正如上圖,Git會有三個區域:

Working Tree 當前的工作區域
Index/Stage 暫存區域,和git stash命令暫存的地方不一樣。使用git add xx,就可以將xx添加近Stage裡面
Repository 提交的歷史,即使用git commit提交後的結果

首先, Git 必須知道當前版本是哪個版本,在 Git 中,用 HEAD 表示當前版本,上一個版本就是 HEAD^ ,上上一個版本就是 HEAD^^ ,以此類推,當然往上100個版本寫100個 ^ 比較容易數不過來,所以寫成 HEAD~100 。

--hard 會在重置 HEAD 和branch的同時,重置緩存區和工作目錄里的內容。當你在 reset 後面加了 --hard 參數時,你的緩存區和工作目錄里的內容會被完全重置為和HEAD的新位置相同的內容。換句話說,就是你的沒稿芹有commit的修改會被全部擦掉。

回退到上一版本:

回退到指定版本號(以1a2b3c為例)的版本:

reset --hard:重置stage區和工作目錄:

--soft 則會保留工作目錄的內容,並把因為重置 HEAD 所帶來的新的文件差異放進暫存區。

什麼是「重置 HEAD 所帶來的新的差異」?就是這里:

由於 HEAD 從 4 移動到了 3,而且在 reset 的過程中工作目錄和暫存區的內容沒有被清理掉,所以 4 中的改動在 reset 後就也成了工作目錄新增的「工作目錄和 HEAD 的差異」。這就是上面一段中所說的「重置 HEAD 所帶來的差異」。

這就是--soft 和 --hard 的區別:--hard 會清空工作目錄和暫碧褲存區的改動,*而 --soft則會保留工作目錄的內容,並把因為保留工作目錄內容所帶來的新的文件差異放進暫存區。

git reset 如果不加參數,那麼默認使用 --mixed 參數。此時表示要:保留工作目錄,並清空暫存區。也就是說,工作目錄的修改、暫存區的內容以及由 reset 所導致的新的文件差異,都會被放進工作目錄。簡而言之,就是「把所有差異都混合(mixed)放在工作目錄中」。

首先, Git 必須知道當前版本是哪個版本,在 Git 中,用 HEAD 表示當前版本,上一個版本就是 HEAD^ ,上上一個版本就是 HEAD^^ ,以此類推,當然往上100個版本寫100個 ^ 比較容易數不過來,所以寫成 HEAD~100 。

回退到上一版本:

回退到指定版本號(以1a2b3c為例)的版本:

--hard 會清空工作目錄和暫存區的改動,
--soft則會保留工作目錄的內容,並把因為保留工作目錄內容所帶來的新的文件差異放進暫存區。
--mixed 參數。git reset 如果不加參數,那麼默認使用 --mixed 參數。此時表示要:保留工作目錄,並清空暫存區。

HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令
git reset --hard commit_id

穿梭前,用 git log 可以查看提交歷史,以便確定要回退到哪個版本。
要重返未來,用 git reflog 查看命令歷史,以便確定要回到未來的哪個版本。

閱讀全文

與git回到上一個版本相關的資料

熱點內容
可視化網路協議是什麼 瀏覽:487
win10卡頓禁止他人下載文件 瀏覽:798
2014北京國際汽車展覽會微信 瀏覽:780
win10中生成文件夾目錄樹 瀏覽:945
linux運行class文件 瀏覽:244
4s越獄的時候程序錯誤 瀏覽:966
java隨機權重 瀏覽:583
超級終端crtwin10 瀏覽:145
html右對齊代碼 瀏覽:227
醫院哪些數據上報衛健委 瀏覽:380
lumia1020win10appx 瀏覽:273
索尼耳機安卓用不了 瀏覽:636
手機保存的微博圖片在哪個文件夾 瀏覽:252
s7200上載密碼 瀏覽:280
微雲上傳文件在哪裡 瀏覽:477
如何注銷微信平台賬號密碼錯誤 瀏覽:380
抖音別人後台數據從哪裡看 瀏覽:986
ios文件存入字元串 瀏覽:996
蘋果6升級814 瀏覽:272
手機被偷怎麼清理數據 瀏覽:768

友情鏈接