❶ git如何回退到某個版本
1. 使用git log命令查看所有的歷史版本,獲取某個歷史版本的id,假設查到歷史版本的id是。
2.使用命令
git reset --hard
3. 把修改推到遠程伺服器
git push -f -u origin master
❷ 怎麼使用repo或git工具將本地代碼回退到歷史的某一個版本。
那些xml文件是分支配置的文件,使用的話直接init 後再sync就可以了
repo init git地址 -b 分支名 -m xml文件名
repo sync
如果要將本地代碼回到某個歷史版本直接checkout 或者 reset
checkout 支持將文件切換到歷史版本,資料庫不會修改,還可以回到你最新的狀態
reset 是直接回退帶指定版本,它有兩種模式 一種是只將所有提交回退,修改還在,還有一種模式是完全回退,修改直接就沒了。
repo forall -c git chekout 指定節點的哈希值
repo forall -c git reset 指定節點的哈希值
repo forall -c git reset 指定節點的哈希值 --hard (此操作會回退掉指定節點之後的所有修改,如果回退出錯 只能重新跟伺服器同步了。)
希望我的回答能幫助你
❸ 如何回退github伺服器的歷史版本
打開Github For Windows 進入到需要回退的項目主頁,在History里選中要回退的某個版本,點擊右側的「roll back」按鈕
2
這時在下方就會提示一個「UNDO」的撤銷操作,代表你已經成功回退到某個版本了
3
當然你可以直接在命令行使用 git reset --hard <commit ID號> 或者 git reset --hard HEAD^來進行回退
❹ git 沒add 就用reset回到之前的版本了,還有辦法回來嗎
沒有用git add,也就是相應的信息沒有加入到Git的緩沖區中,更沒有被Git作為版本提交記錄下來。所以,不能恢復了.
❺ 如何用 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 的工作區,暫存區和版本庫的各種指針操作的意義,希望對大家有用。
❻ zend studio 10 使用git 如何回到歷史版本
一.選中你的項目->右鍵->replaced with->commit
二.會彈出一個對話框,告訴你現在的代碼將不會保留,直接點OK即可。
三.選中你要恢復到的時間點
四.點擊OK即可
❼ Git當中怎麼尋找版本號,並回退以前版本當中的某個文件
簡單,git log -- your_path即可列出某個路徑的changelog,然後進一步查commit記錄就可以找到被刪掉的文件記錄了
比如我的xalk/grails-app/conf/Config.groovy早已經刪掉,但是可以通過git log顯示最後一次該文件的遞交記錄拿到這個commit。
git log -1 --decorate -- xalk/grails-app/conf/Config.groovy
❽ 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 獲取歷史版本的幾種方式
我們簡單的描述一個例子:
a)初始化操作
有兩個文件file1.txt和file2.txt
1, 初始化的時候就有這兩個文件
操作:
git init
git status
git add .
git commit -m 「init version」
2, 在master分支上修改了file1.txt,並提交
操作:
(修改file1.txt)
git add file1.txt
git commit -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 commit -m 「change by banana」
這個時候,我們可以輸入 gitk,查看一下當前的版本情況。如下圖:git-001
5, 然後,切換到master分支上,修改file2.txt,並提交。
操作:
git checkout master
(修改file2.txt)
git add file2.txt
git commit -m 「change by master」
輸入gitk,查看當前版本情況,如下圖:git-002
b)發現問題需要查看歷史版本
我們現在發現當前的版本有點問題,還不能提交到版本庫。
1,我們需要從git commit中返回.
則輸入:
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 commit」狀態。
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
以上的操作,我們知道了如何查看版本分支,和如何回復到以前的版本。