文章目錄
- 前言
- 基礎
- Gerrit
- 1.克隆
- 2.新建本地分支和checkout
- 3.添加到暫存區
- 新增文件到暫存區
- 修改已經添加到暫存區的文件
- 取消添加到暫存區的文件
- 4.提交到本地倉庫
- 在不重復提交的情況下,修改本次提交
- 5.提交到遠程倉庫
- 6.評審
- 其他輔助命令
前言
目前也算是工作一段時間了。之前寫的git基本操作一直放在草稿箱里面沒發布。這次就打算跟著這一起給寫出來做一個總結。
基礎
git操作
Gerrit
我們公司用的是Gerrit,跟我們常用的github和gitee上的一些細節還是有點差別。這里詳細說一下。
Gerrit的核心是企業級評審,而他評審的核心是changeId。所以,在使用Gerrit的時候,最重要的是保證changeId是不能變的,但是commit 那一串的Id會隨著我們的提交發生變化,這個是可以的。下面我將按照git工作流程來對我工作上常用的git操作進行總結。
1.克隆
工作中的克隆的時候,依然跟我們平常一樣,注意設置好ssh,以及設置user和email。在企業里面,如果你的企業比較大,需要注意的就是,你可能會沒有代碼倉庫的權限,以及,沒有代碼倉庫依賴的代碼倉庫的權限(人家的開發用的基礎框架都是自研的),找leader申請吧。
2.新建本地分支和checkout
這個沒有什么好說的,唯一需要注意的點在于,你們公司用的是什么git工作流。這影響你對代碼的管理(你當然可以在本地的master分支開發,但如果你同時要做n個需求,你再像之前那樣在master分支開發,代碼的管理就會很困難)
3.添加到暫存區
我在沒上班之前,我就喜歡直接git add .
,很爽。搞了一次之后,我就老實了。如果你直接全部添加的話,我一般還會寫一些不想添加到倉庫的代碼(比如測試代碼,比如編譯之后的文件,比如日志等等,這些按照要求是不能添加到代碼倉庫的)。如果你直接git add .
你的領導在review的時候,就會跟你說這個不行。讓你給刪,再評審。就比較麻煩。
正確的做法是
新增文件到暫存區
git add 文件名
修改已經添加到暫存區的文件
git add -u 文件名
取消添加到暫存區的文件
git reset 文件名
上面基本就是我最常用的命令了。
4.提交到本地倉庫
這里需要注意,我們公司每次開發一個功能或接口,都會創建一個開發卡片。沒有綁卡片都提交不到倉庫里面。
git commit -m “[卡片編號]本次代碼的描述”
在不重復提交的情況下,修改本次提交
這個命令真的是我使用頻率最高的命令了,當你的代碼被打回來,需要修改代碼,但是你的changeid還不能變,你還不能重復commit。那應該怎么辦呢?
git commit --amend --no-edit
使用這個命令,當你把你新寫好的代碼給add 之后,你就能在不改變changeid的情況,把新添加的代碼給放到當前的commit上。
如果你的代碼改了,還想修改描述。
git commit --amend
它會出來你相關的提交,使用的vim編輯器。vim怎么操作就不多說了。
5.提交到遠程倉庫
還記得我上面說的,使用的是Gerrit嘛。他在這里的命令跟github和gitee有一點不一樣。
他的流程是先評審在合并(其他的流程是先提PR,審查沒問題后再合并,PR不會卡你的commit)
git push origin 需要提交的本地分支名:refs/for/遠程分支名
這里需要注意的點
1.當你需要提交的時候,你才去從在遠程的master分支拉出你需要提交的分支。
場景舉例:
1.比如我現在開始寫了統計相關的代碼,我的本地分支叫Statistics。然后我還沒寫完我就在遠程分支創建了Statistics。
2.經過1天的時間,你寫完了代碼,在這期間,其他人向master合并他的代碼
3.你提交了你的代碼,然后不合格,被領導打回來了,完全重寫,你想reset,不小心把分支搞亂了,你把這個本地分支給刪除了。然后你對master進行了更新,又拉了一個分支叫Statistics。
這個時候提交,你的提交會帶著上一次別人更新的代碼。原因是本地的master是最新的分支,但你遠程的Statistics分支是基于上一個版本的master拉出來的,Gerrit可不管你是上一個還是最新的,它只看你兩個分支的代碼區別。
本人的親身經歷。
解決方法也很簡單,把遠程的Statistics給刪了,再基于最新的master拉Statistics,你本地的分支是一點都不用變的,評審就OK了。
6.評審
Gerrit的評審可以在網頁上寫評論和和打分。打分分為-2,-1,0,+1,+2。通過就是+2。如果只想評論就是0。不想通過就是-2。評審完了就是可以合并了。趁著你還記得你寫的代碼,該合并就合并吧。因為你后面還要QA進行測試,QA還有其他的活,所以你合并完就快點QA聯系。快的話,第二天就可以測了。如果當天測完之后,時間還早,上線時機合適,就可以上線了。(讓你早點合并的原因就是,你現在還記得你的代碼,要確保你沒有把臟代碼給合并上去,過幾天,你自己都不記得你寫的代碼了,再讓你上線你心里會發怵)
其他輔助命令
git status
git log -p
git log --oneline
git reset --soft commit-id