文章目錄
轉載請註明原始鏈接: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的博客)或者爲這篇文章點贊,謝謝!