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...