GIT:操作了一波錯誤的神操作後,一般需要用到的騷手段(在臨時分支提交了代碼並刪除了怎麼辦)

gitHub地址:https://github.com/susuGirl 

版本控制工具

  • 本地版本控制

  • 集中版本控制  svn

  • 分佈式版本控制  git (3種工作區域:工作目錄、暫存區域、本地倉庫)

建立分支的標準

  • master 分支

    • 用來發布重大版本的分支
    • 每個版本用tag打點一次

    • 而且建議每次合併develop開發分支的時候將所有提交合併爲一個提交,保持mastr分支的提交記錄簡潔明瞭

  • develop 分支

    • git checkout -b develop master 在 master 分支的基礎上生成新分支 develop

  • feature 功能分支

    • 由develop分支衍生出來,開發完成與develop分支合併完成後應刪除
  • release 預發佈分支

    • 由develop分支衍生出來,開發完成與develop分支合併完成後應刪除
  • fixbug 修補bug分支

    • 由master分支衍生出來,修補完畢再合併進develop和master分支

操作了一波錯誤的神操作後,一般需要用到的騷手段

想當年我年少無知,rebase代碼的時候衝突了,但是當時腦子裏水裝多了愣是沒發現,結果就在衝突生成的臨時分支上寫了新功能新代碼,問題是還commit了好幾天的好多提交,結果一波神操作直接在臨時分支上把代碼乾沒了臨時分支也乾沒了。幸好公司的小哥哥配合 cherry-pick 把代碼提交記錄一個一個撿回來了,不然都要急哭了,這就是菜和眼瞎的代價。

然後那週末自己就在家裏啃了兩天的git,建新項目自己造bug自己解,一邊想方設法丟代碼一邊又想方設法的撿回來…...雖然記不住那麼命令,但是以後再出情況至少你知道這種情況是能解決的就不慌了四不四

  • 從遠程倉庫拉取一條本地不存在的分支,創建本地分支並拉取遠程分支

    • git checkout -b develop origin/develop
    • git fetch origin 遠程分支名x:本地分支名x

  • 重命名分支

    • git branch -m oldName newName
  • 修改最後一次的commit信息

    • git commit --amend -m '......’
    • git commit —amend

      • 會出現vim的編輯頁面
        • i 開始編輯
        • ESC 退出編輯模式

        • u 撤銷

        • :w 保存

        • :q 退出

  • 將某一次的提交挑揀合入到當前分支

    • git cherry-pick commit-id
    • 如果有衝突則解決衝突  然後 commit

  • 回滾到某一個commit,但是會保留下修改內容

    • git reset —soft commit-id
  • 回滾了最後一次commit提交,代碼回回到回滾版本時的狀態不保留下修改內容,並且未commit的內容會消失

    • git reset —hard HEAD~1
  • 看到所有的被刪除的 提交或者add或者未add的文件

    • git fsck --lost-found
  • 查看提交

    • git log --oneline -7 查看最近的 N 次提交
    • git log -g 或者 git lg 查看全部提交
  • 查看詳細記錄

    • git show commit-id
  • 找回不小心被回滾的這一次提交

    • 查看記錄 git reflog
      • git reset —hard 63a9b5d

  • 誤刪分支,還原分支

    • git reflog 查看所有提交記錄,找到誤刪分支的最後一次提交

    • git branch branch-name commit-id

  • 刪除遠程倉庫不存在的分支

    • git remote prune origin

  • 刪除遠程分支

    • git push origin —delete branch-name

  • 刪除分支

    • git branch -d branch-name     刪除,若分支還未合併不能刪除

    • git branch -D branch-name    強制刪除,即使還沒有合併

  • 推送並創建遠程分支

    • git push origin branch-name


將遠程倉庫更新到本地以及分支的合併

  • git fetch / git rebase 推薦這種方式

    • git fetch 更新
    • git rebase branch-name 複製提交

    • git mergetool 使用工具解決衝突

    • git clean -f   解決完衝突,清理臨時文件

    • git rebase —continue 繼續

    • 生成的 git 圖譜:一條線表示強迫症看着很舒服

  • git pull / git merge

    • git pull 的命令是 git fetch 和 git merge 的結合
    • 生成的 git 圖譜:三線譜 四線譜 六線譜…十線譜…N線譜...

 

  • 兩種方式的區別,簡單介紹下原理,畫了個圖:

  • merge 是指針形式,merge 的時候會多生成一個merge的提交記錄,保留兩個分支記錄,從而兩個分支都指向merge提交

  • fetch/rebase 則是複製每一個提交到主分支上,不會保留子分支記錄,不會衍生多餘的分支曲線,從而保持分支整潔

以上內容沒有做深入解說,想深入瞭解可參考以下文章:

https://www.yiibai.com/git

http://www.ruanyifeng.com/blog/2012/07/git.html

http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章