git 解決版本衝突
摘要
由於本人剛開是用git,命令不是很熟,遇到問題不知道怎麼解決,第一遇到的問題就是版本衝突,然後通過查資料,看到網上有人提供的解決方案,看這不錯,就搬了過來,希望加深下自己對此問題的理解。
描述
是這樣的,最近在和別人一起做專案的時候,夥伴在上傳他的程式碼時,因為上傳速度比較慢,他以為是卡機了,所以關掉git bash,重新上傳,重複了幾次,最後導致Github上面的程式碼亂碼,而我卻把上面亂碼的程式碼pull下來,導致我的也亂碼。
分析
因為我們之前的commit的版本沒有問題,所以之前的程式碼沒事,那麼我們需要解決的就是實現版本回退,就可以把程式碼恢復至最後一次成功提交的記錄。
解決
前提
前提是你已經熟悉掌握如何使用git操作本地倉庫和遠端倉庫的更新。
我自己建立了一個資料夾 TestGit,裡面有兩個檔案,我按兩次分別上傳到GitHub上面
然後我們要做的就是把本地的專案檔案和Github倉庫恢復至只有一個 一、正常版本.txt 檔案。
一、本地git倉庫版本回退
檢視提交版本
$ git log
通過這個命令可以檢視歷史提交版本,我提交了兩個版本,所以顯示兩個提交版本
這些版本都是按提交時間排序的,最後提交的排在最上面。而每一個版本都會有個id,大家可以看到黃色字型commit後面跟著的一寸數字就是每次提交版本的id。
撤回之前的版本
當我們希望退回到上一個版本時可以使用
git reset--hard HEAD^
當我們希望退回上兩個版本時可以使用
git reset--hard HEAD^^
當然,往上100個版本就直接
git reset--hard HEAD~100
OK,那麼我執行一下 git reset --hard HEAD^
果然,可以恢復到正常版本了。
恢復新版本
當然,我們也會有可能第二天開啟電腦想恢復錯誤版本,我們使用git log
是不會顯示那個版本的,那麼我們可以通過以下命令:
git reflog
這個命令可以檢視我們每一次的命令,可以看到我們的錯誤版本在這裡可以檢視的到,每一行前面的黃色字串就是我們版本的id,當我們需要恢復這些版本時,可以通過這些id來恢復。
當我們想恢復到指定版本時,可以通過以下命令
git reset--hard commit_id
例如,我恢復id為a016fa8的錯誤版本時,如下:
果然恢復了!
二、Github版本回退
我們在本地回退了版本之後,github並沒有回退版本,此時我們需要將它push到github倉庫中。我們可以通過以下命令:
git push <remote> HEAD --force
為此,我將自己的commit回退到只有正常的版本,這是我本地檔案狀態:
這是我的github專案中的狀態: