此文作為在工作工使用git的一篇筆記防止遺忘鸽斟。長期更新,如果有錯誤妈橄,請指正,不勝感激赞庶。
工欲善其事必先利其器训挡,我同時使用的git命令行和GUI的方式使用git,原因是:命令行在多分支查看與多文件提交時歧强,比對效率不如gui工具高澜薄;但是GUI的功能上不如命令行強大,某些操作速度上不如命令行快摊册。
我處理命令行g(shù)it外肤京,用的GUI工具主要有兩個,一個是jetbrains家族軟件的idea自帶的git插件茅特,一個是GitKraken(界面比較華麗忘分,專業(yè)版收費,個人使用免費版本就行)
系列文章:
1白修、《git入門教程》http://www.reibang.com/p/d22d1a517f93
安裝好git后的的第一步(如果不設(shè)置后面不允許提交):
git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"
1妒峦、基礎(chǔ)命令
由于是基礎(chǔ)命令,就不進行介紹了兵睛,很多文章都介紹的比較詳細肯骇。
git config --list 查看當(dāng)前的配置
git add .
git commit -m "init" # init 為你的提交信息,可以任意填寫祖很,但是團隊開發(fā)時建議制定規(guī)范笛丙,并按規(guī)范填寫。
2 假颇、快捷命令
對于已經(jīng)加入緩存區(qū)中的文件胚鸯,可以使用git commit -am ""# 省去了git add .這一步操作。
從緩存區(qū)移除 ,文件拆融。
git rm --cache <file>
展示所有被追蹤的文件
git ls-files -t
git push origin
上面命令表示蠢琳,將當(dāng)前分支推送到origin主機的對應(yīng)分支。如果當(dāng)前分支只有一個追蹤分支镜豹,那么主機名都可以省略傲须。如下:
git push
git branch --set-upstream my_branch origin/my_branch 這條命名設(shè)置遠程追蹤。
常用的alias:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"
git config --global alias.co checkout
git config --global alias.st status
git rebase -i
git checkout -b name-of-new-branch 169d2dc
查看全局的配置(包括alias):
git config --global --list
3趟脂、分支管理
分支管理是git比較有特色的地方泰讽。
下面介紹一些常用的git 分支操作命令。
1)創(chuàng)建分支
git branch mystudygit1.0
創(chuàng)建分支并且切換到分支
git branch -b mystudygit1.0
創(chuàng)建指定版本的分支,并且切換到此分支(-b表示切換的意思)
git checkout -b name-of-new-branch 169d2dc
git checkout -- file 表示將已經(jīng)加入 緩存區(qū)的文件的改動刪除已卸,用的比較少佛玄,具體參考如下鏈接:
http://www.cnblogs.com/Calvino/p/5930656.html
切換分支
git checkout mystudygit1.0刪除分支
git branch -d mystudygit1.0 //如果該分支沒有合并到主分支會報錯
或者
git branch -D mystudygit1.0 //強制刪除
刪除本地遠程分支
git branch -r -d origin/branch-name
刪除服務(wù)器遠程分支
1、
git push origin :<branch-name>
或
?2 累澡、
git?push?origin?--delete?<branchName>
3梦抢、git 推送本地分支test
到遠程feature_add_querymodel
git push origin test:feature_add_querymodel
4、重命名分支
git branch -m devel develop
git cherry <sha1> 命令
如果發(fā)生了沖突愧哟,需要手工解決沖突奥吩,
然后使用 git cherry-pick --continue 告知 git 已經(jīng)解決完沖突或者
使用 git cherry-pick --abort 取消,並且回到 cherry-pick 前的狀態(tài)
要選擇多個提交蕊梧,可以給git cherry-pick命令傳遞-n選項霞赫,比如:
git cherry-pick –n 321d76f
git cherry-pick –n c87fc86
此時所有的321d76f 版本會應(yīng)用到當(dāng)前的暫存區(qū)和工作目錄但是不會提交,head指針不會發(fā)生移動肥矢。改變
這樣在揀選了這個改動之后端衰,進行暫存而不立即提交,接著可以進行下一個揀選操作甘改,一旦揀選完需要的各個提交旅东,就可以使用git commit命令 一并提交。
idea 自帶git插件rebase楼誓,rebase操作:
點擊右下角的git:xxx 即可出來彈窗玉锌。
如果出現(xiàn)沖突的換會出現(xiàn)類似彈窗名挥。
雙擊文件名稱即可進行手工解決沖突疟羹,idea非常人性化的對比文件
點擊圖中箭頭即可accept代碼。
中間為合并的版本禀倔,最右邊為遠程版本榄融,圖中也顯示了出來。具體可以操作一下試試救湖。
apply all non-confliction changes 這個功能也是十分的好用愧杯。
當(dāng)然可以手工操作,不過覺得界面操作更為快捷鞋既,解決沖突更易力九。
參考文檔:https://git-scm.com/docs/git-cherry-pick
4、git規(guī)范
rebase準(zhǔn)則:
“No one shall rebase a shared branch”?—?Everyone about rebase
mingl
翻譯一下就是:
不要在公共分支上rebase邑闺,因為會使分支變得混亂跌前。
5、開發(fā)流程
在工作中陡舅,用git管理項目需要走一下流程抵乓。
1、Release分支: 穩(wěn)定分支,由master leader 負(fù)責(zé)merge灾炭。用于生產(chǎn)環(huán)境的部署茎芋。
2、Master分支: 開發(fā)分支蜈出。定期 merge 到 release 分支田弥。
3、Pre分支:預(yù)生產(chǎn)分支铡原,測試通過后皱蹦,可以申請merge到master分支。Pre 分支用于 Preview 環(huán)境的部署眷蜈。
4沪哺、Feature 分支:開發(fā)分支。開發(fā)完后 cherry-pick 到 staging 分支進行測試酌儒,測試通過后 cherry-pick 到 Pre 分支進行 Preview 環(huán)境的測試辜妓。feature 分支名以 feature_ 開頭,后面跟簡短的英文說明忌怎。比如籍滴,某次修改為了添加測試,可將分支名命名為 feature_add_unit_tests 榴啸。
git config --global user.email "bsqql123@163.com"
git config --global user.name "ice blue"
git reflog 可以查看歷史操作命令孽惰,非常好用。
git reset --soft sha-id 即可返回到指定操作前鸥印。
pull request 的操作步驟勋功,首先完成提交后,一定要記得rebase 公共分支代碼库说,
比如我在
dev分支checkout的feature分支狂鞋,commit后,pull request前記得rebase dev分支的代碼潜的。
當(dāng) pull request后骚揍,別人審核你的代碼不通過,這時你要重新修改啰挪,可以使用
git add <file> #一定要先把文件放到暫存區(qū)
然后使用
git commit --amend
這個命令信不,只能修改最后一次提交,如果想修改前幾次的提交亡呵,請使用reset抽活。
操作步驟
git fetch
git rebase -i dev
或者使用更為簡潔的命令:
git pull --rebase devx
常見問題:
! [rejected] dev -> dev (non-fast-forward)
一般出現(xiàn)這個問題是由于本地遠程分支和服務(wù)遠程分支不同步造成的,
有兩種解決辦法:
1政己、強制推送到遠程
2酌壕、先fetch 后merger掏愁,或者直接git pull