55.Git備忘筆記

轉載請註明原始鏈接:http://blog.csdn.net/a464057216/article/details/52823207

後續此博客不再更新,歡迎大家搜索關注微信公衆號“測開之美”,測試開發工程師技術修煉小站,持續學習持續進步。
在這裏插入圖片描述

導語

推薦學習網站:

關於Git的教程網上有很多,推薦先學習廖雪峯老師的博客。使用Git一段時間以後再看下Git-tower中的教程,Git客戶端的操作應該足夠了。筆者作爲測試開發工程師,除了日常開發使用Git工具本身以外,還做了一些開發流程上QA的思考,以期能夠規範項目的開發,避免因爲開發人員的誤操作影響線上產品的質量,也推薦大家學習一下git-flow
如下是我的一些備忘筆記,供自己參考之用(可能很多基礎命令沒有覆蓋到)。

命令行

暫存

git stash暫存與分支無關。

分支信息

git branch -va:查看所有分支(本地+遠端)詳細信息。
git branch -vr:查看遠端分支詳細信息。
git branch -v:查看本地分支詳細信息。
git checkout --track remote/branch:根據遠端分支創建本地分支並自動建立關聯。
git branch -vva:查看查看所有分支(本地+遠端)詳細信息(包含關聯信息)。

撤銷修改

修改本地的上一次提交,不能修改已經push到遠端的修改
git commit --amend -m "commit message",可以只修改註釋消息,或者將本來應該屬於上一次的修改add到stage後,執行git commit --amend修改上一次提交,從log上看會替換上一次提交,就像錯誤的提交不曾存在或一樣。

撤銷或刪除本地未提交的修改

這裏寫圖片描述

恢復已經提交的修改

git revert commit-hash不會將倉庫回滾到相應的commit-hash對應的版本,而是嘗試恢復回去(如果有衝突需要解決衝突)然後進行一次新的提交。
git reset --hard commit-hash會真的丟棄中間版本,回滾到對應的版本,所以使用--hard參數時一定要小心。不過,通過git reflog命令能夠查到HEAD歷史上對應的commit-hash信息,還能恢復回來。

比較差異

git diff命令的習慣用法是git diff old_commit_hash..new_commit_hash(查看不同提交之間的差異)或者git diff branchA..branchB(查看不同分支之間的差異),其餘用法如下:
這裏寫圖片描述

撤銷合併

合併衝突時,只要沒有git commit合併後的修改,就可以使用git merge --abort命令隨時撤銷這次合併(恢復到git pull以前的狀態)。

git rebase

合併衝突時,如果使用git rebase branchB合併分支B到當前分支A,過程如下:
1.首先將分支A的不同提交暫存起來
這裏寫圖片描述

注:上述圖片來自git tower

2.將分支B上的提交整合到分支A(re-based):
這裏寫圖片描述

注:上述圖片來自git tower

3.最後將分支A上的暫存內容掛到分支B的提交之後:
這裏寫圖片描述

注:上述圖片來自git tower

rebase合併之後,分支A的歷史記錄被改寫了,如果提交C3已經發布出去了的話,這樣修改是非常危險的。所以git rebase適合的場景是:與同事一起基於develop分支開發,同事先完成任務,將他開發的新功能A的分支rebased到develop分支,我們自己完成新功能B的開發以後,在develop分支將featuer-B功能rebase進來,這樣develop分支的version tree看起來就是一條直線。最後本輪開發結束時,應該在master分支上執行git merge develop --no-ff命令合併develop分支的開發,這樣可以方便的保留開發合併記錄。

子模塊

添加子模塊

在項目目錄的lib目錄中,執行如下命令添加子模塊:
git submodule add https://github.com/djyde/ToProgress
子模塊的內容並不包含在項目中,項目只保存子模塊的路徑、URL及其檢出版本。

添加子模塊之後,git status命令可以看到改動已經提交到了stage,然後使用git commit -m message命令提交改動到倉庫即可。

clone子模塊

clone一個包含子項目的Git項目時,需要使用git clone --recurse-submodules命令在clone的同時初始化所有子模塊。如果clone時沒有使用--recurse-submodules參數,可以使用git submodule update --init --recursive命令初始化子模塊。

指定子模塊的版本

切換到子模塊的項目目錄(/lib/ToProgress),執行git log --oneline --decorate命令查看子模塊的版本情況,然後檢出一個版本,比如:git checkout 0.1.1,在父項目目錄執行git submodule status可以查看子模塊信息,然後在父項目執行git commit -a -m message提交修改。

在與同事合作開發項目時,如果其他同事修改了子模塊的版本,我們合併衝突後還需要使用git submodule update lib/ToProgress命令更新相應的模塊(工作區中模塊的內容)。

更新子模塊版本

如果要更新子模塊到最新版本,需要在其上下文中執行git pull origin master命令拉取其最新代碼,然後git checkout master到master分支,回到父目錄執行git submodule status可以查看是否更新成功。

刪除子模塊

刪除子模塊,需要先執行git submodule deinit module_name指定清除子模塊的配置文件,然後使用git rm lib/module_dir刪除子模塊的內容,最後git commit -a -m message提交更改。

git-flow工具

Mac上使用Oh-my-zsh上安裝git-flow,如果在plugin中使能了git-flow以後,命令行補全功能不好使,需要重新安裝git客戶端:

$ brew uninstall git
$ brew install git --without-completions

然後安裝git-flow:$ brew install git-flow
初始化一個git-flow倉庫:

$ git init
$ git config user.name mars
$ git config user.email [email protected]
$ git flow init

開始一個功能分支開發:$ git flow feature start feature_name
分支功能開發完成以後:$ git flow feature finish feature_name
發佈版本:$ git flow release start version_number
完成發佈:$ git flow release finish version_number
開始hotfix:$ git flow hotfix start bug_number
結束hotfix:$ git flow hotfix finish bug_number

如果覺得我的文章對您有幫助,歡迎關注我(CSDN:Mars Loo的博客)或者爲這篇文章點贊,謝謝!

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