Git異常處理 1

2021-08-20 11:23:30 字數 3056 閱讀 1003

git異常在這裡泛指在本地個人倉庫中發生的錯誤提交或者移除,雖然在個人倉庫,但你處理錯誤的方式將會影響到其他人與**庫的互動。

1.使用分支進行試驗性的工作

最簡單的方式是隔離修改,確保修改正確後在合併到主分支。我們知道工單可以作為建立和刪除分支的起點,但如果你在乙個工單上進行工作,但不確定應該使用這兩種方法的哪乙個,在這種情況下,你可以從你的工單上建立乙個新的分支,在新分支上進行試驗性的修改,如果你想要儲存這些修改,在將試驗性的分支併入你的工單分支。

#使用試驗性的分支來測試修改

git checkout -b experimental_idea

(完成工作)

git add --all

git commit

#將試驗型分支並回主分支

git checkout master

git merge experimental_idea --squash

git commit

#刪除試驗性分支

git branch --delete experimental_idea

需要注意:

a. squash(壓縮),指當在試驗性分支上有多次提交時,將所有提交併入乙個提交,通過這種方式合併分支的乙個缺點是以後不能撤銷分支合併

.b. delete, 如果要捨棄試驗性的修改,刪除乙個未合併的分支則使用 --d 引數。

2. 變基

變基指的是使用父分支上的提交更新乙個分支的過程。假設父分支(master),需要更新的分支feature. rebase 是唯一不侷限於撤銷工作的命令。當你在想要更新的分支上,執行rebase命令並使用父分支的名字作為引數。git作為乙個簡單的內容跟蹤工具,git將你的提交從工作所在的子分支上移除,並將父分支上產生的新的提交新增到你的分支頂端。這樣做看上去你的提交被放在了父分支中新增的修改後(

我的理解:將父分支和子分支中所有的差異,放在子分支頂端形成子分支上的提交

)。

#保證父分支的本地副本與專案主倉庫中最新的提交同步。

git checkout master

git pull

#當前分支上的修改與主專案不同步,而主專案中的新工作尚未被引入

git checkout feature

#開始變基

git rebase master

檔案刪除造成的變基衝突

#使用git status 詢問git工作的線索

git status

#如果是主倉庫已經刪除的檔案則需要重新提交。rebase過程中需要將刪除的檔案取消暫存(unstage)

git reser head 檔名稱

git add 檔名稱

3. 定位歷史記錄

在git中完全捨棄某個提交過的工作是非常困難的,但是弄丟自己的工作是很容易的事。如果認為丟失了一些工作,首先應該找到儲存之前工作的提交。 log命令顯示某個分支上使用init命令建立倉庫後的所有歷史提交,relog命令則列出起始於你把遠端倉庫轉殖到本地環境時的那一刻。這兩個命令都會顯示倉庫中的某個狀態的提交id,只要找到了id,就可以簽出這個提交,及時將**庫的版本臨時恢復到那個節點。

git log

git log --oneline

git relog

#在倉庫中簽出特定歷史提交

git checkout commit

當簽出乙個提交時,你將與某個分支相連的歷史記錄分離,處於暫停狀態即代表你與分支的線性歷史記錄暫時失去連線。具體如下圖所示:

#建立乙個新分支,將你的狀態記錄在新的分支上,可以做出一些修改

git checkout -b restoring_old_commit

#之後在將其合併到本地倉庫

git checout working_branch

git merge restoing_old_commit

#合併完成之後,刪除臨時分支

git branch --delete restoing_old_commit

#如果已經發布了臨時分支,並希望從遠端倉庫刪除它

git push -- delete restoing_old_commit

#使用cherry-pick將提交複製到新的分支上

git cherry-pick -x commit

cherry-pick(揀選),使用我想要複製到當前分支的提交id,可選的-x引數在提交訊息後新增了一行,告訴你這個提交是從別處揀選的,而不是當前分支上原創的。

4. 還原檔案或回到上乙個提交的版本    首先一點要遵循git的指示來操作。例如,工作中不小心刪除了某個檔案,而又想恢復這個檔案,或者你修改了乙個不該修改的檔案,在這些修改被鎖定(或commit)之前,你可以簽出這些檔案。你可以將檔案內容恢復到當前所在分支中最新的已知提交,並儲存這個檔案。

rm readme.md

git status #檢視git的操作提示

git checkout --readme.md

如果你已經暫存了也就是使用了git add filename命令,你需要使用reset命令在恢復之前將它取消暫存。

rm readme.md

git add readme.md

git status

#取消暫存

git reset head readme.md

#一旦取消暫存,就可以使用checkout命令恢復被刪除的檔案

git checkout --readme.md

#以上兩個命令可以合併為乙個

git reset --hard head --readme.md

如果你想撤銷工作目錄中所有的變更,將所有檔案恢復到上乙個提交版本。則批量完成命令如下

git reset --hard head

git異常處理

1 develop強制覆蓋master分支 git push origin develop master f 把本地的 develop 分支強制 f 推送到遠端 master 但是上面操作,本地的 master 分支還是舊的,通常來說應該在本地做好修改再去 push 到遠端,所以我推薦如下操作 切換...

c primer異常處理 1

異常就是程式執行時出現的不正常,例如執行時耗盡了記憶體或遇到意外的非法輸入.異常存在於程式的正常功能之外,並要求程式立即處理.異常機制提供程式中錯誤檢測與錯誤處理部分之間的通訊.c 的異常處理中包括 throw表示式 錯誤檢測部分使用這種表示式來說明遇到了不可處理的錯誤.可以說,throw引發了異常...

java異常處理相關 1

1.error與exception的區別 2.exception與runtimeexception的區別 3.trycatch finally執行順序 public class x catch error ex finally exception也是throwable的子類,按照checked un...