創(chuàng)建版本庫:
- 初始化一個Git倉庫齿诞,使用git init命令。
- 添加文件到Git倉庫骂租,分兩步:
- 使用命令git add <file>祷杈,注意,可反復多次使用渗饮,添加多個文件但汞;
- 使用命令git commit -m <message>(message內容要加雙引號),完成互站。
時光機穿梭:
- 要隨時掌握工作區(qū)的狀態(tài)私蕾,使用git status命令。
- 如果git status告訴你有文件被修改過胡桃,用git diff可以查看修改內容
版本回退:
- HEAD指向的版本就是當前版本踩叭,因此,Git允許我們在版本的歷史之間穿梭翠胰,使用命令git reset --hard commit_id容贝。
- 穿梭前,用git log可以查看提交歷史之景,以便確定要回退到哪個版本斤富。
- 要重返未來,用git reflog查看命令歷史闺兢,以便確定要回到未來的哪個版本茂缚。
工作區(qū)和暫存區(qū)
管理修改
撤銷修改:
場景1:當你改亂了工作區(qū)某個文件的內容,想直接丟棄工作區(qū)的修改時屋谭,用命令git checkout -- file脚囊。
場景2:當你不但改亂了工作區(qū)某個文件的內容,還添加到了暫存區(qū)時桐磁,想丟棄修改悔耘,分兩步,第一步用命令git reset HEAD <file>我擂,就回到了場景1衬以,第二步按場景1操作缓艳。
場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交看峻,參考版本回退一節(jié)阶淘,不過前提是沒有推送到遠程庫。
刪除文件:
- 命令git rm用于刪除一個文件互妓。如果一個文件已經(jīng)被提交到版本庫溪窒,那么你永遠不用擔心誤刪,但是要小心冯勉,你只能恢復文件到最新版本澈蚌,你會丟失最近一次提交后你修改的內容。
遠程倉庫
添加遠程庫:
- 要關聯(lián)一個遠程庫灼狰,使用命令git remote add origin git@server-name:path/repo-name.git宛瞄;(origin是默認遠程庫名稱)
- 關聯(lián)一個遠程庫時必須給遠程庫指定一個名字,origin是默認習慣命名交胚;
- 關聯(lián)后份汗,使用命令git push -u origin master第一次推送master分支的所有內容;
- 此后承绸,每次本地提交后裸影,只要有必要,就可以使用命令git push origin master推送最新修改军熏;
- 分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠程庫的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作卷扮,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的荡澎!當有網(wǎng)絡的時候,再把本地提交推送一下就完成了同步晤锹!
從遠程庫克履︶!:
- 要克隆一個倉庫,首先必須知道倉庫的地址鞭铆,然后使用git clone命令克隆或衡。
- Git支持多種協(xié)議,包括https车遂,但ssh協(xié)議速度最快封断。
分支管理:
創(chuàng)建與合并分支:
- Git鼓勵大量使用分支:
- 查看分支:git branch
- 創(chuàng)建分支:git branch <name>
- 切換分支:git checkout <name>或者git switch <name>
- 創(chuàng)建+切換分支:git checkout -b <name>或者git switch -c <name>
- 合并某分支到當前分支:git merge <name>
- 刪除分支:git branch -d <name>
解決沖突:
- 當Git無法自動合并分支時,就必須首先解決沖突舶担。解決沖突后坡疼,再提交,合并完成衣陶。
- 解決沖突就是把Git合并失敗的文件手動編輯為我們希望的內容柄瑰,再提交闸氮。
- 用git log --graph命令可以看到分支合并圖。
- git log --graph --pretty=oneline --abbrev-commit指令的含義:
- graph 圖形
- pretty=oneline 減少數(shù)據(jù)
- abbrev-commit 頭部數(shù)據(jù)減少
分支管理策略:
- 合并分支時教沾,加上--no-ff參數(shù)就可以用普通模式合并蒲跨,合并后的歷史有分支,能看出來曾經(jīng)做過合并授翻,而fast forward合并就看不出來曾經(jīng)做過合并财骨。
Bug分支:
- 修復bug時,我們會通過創(chuàng)建新的bug分支進行修復藏姐,然后合并隆箩,最后刪除;
- 當手頭工作沒有完成時羔杨,先把工作現(xiàn)場git stash一下捌臊,然后去修復bug,修復后兜材,再git stash pop理澎,回到工作現(xiàn)場;
- 在master分支上修復的bug曙寡,想要合并到當前dev分支糠爬,可以用git cherry-pick <commit>命令如$ git cherry-pick 4c805e2,把bug提交的修改“復制”到當前分支举庶,避免重復勞動执隧。
Feature分支:
- 開發(fā)一個新feature,最好新建一個分支户侥;
- 如果要丟棄一個沒有被合并過的分支镀琉,可以通過git branch -D <name>強行刪除。
多人協(xié)作:
- 查看遠程庫信息蕊唐,使用git remote -v屋摔;
- 本地新建的分支如果不推送到遠程,對其他人就是不可見的替梨;
- 從本地推送分支钓试,使用git push origin branch-name,如果推送失敗副瀑,先用git pull抓取遠程的新提交弓熏;
- 在本地創(chuàng)建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name俗扇,本地和遠程分支的名稱最好一致硝烂;
- 建立本地分支和遠程分支的關聯(lián),使用git branch --set-upstream branch-name origin/branch-name铜幽;
- 從遠程抓取分支滞谢,使用git pull串稀,如果有沖突,要先處理沖突狮杨。
Rebase:
- rebase操作可以把本地未push的分叉提交歷史整理成直線母截;
- rebase的目的是使得我們在查看歷史提交的變化時更容易,因為分叉的提交需要三方對比橄教。
標簽管理:
創(chuàng)建標簽:
- 注意:標簽總是和某個commit掛鉤清寇。如果這個commit既出現(xiàn)在master分支,又出現(xiàn)在dev分支护蝶,那么在這兩個分支上都可以看到這個標簽华烟。
- 命令git tag <tagname>用于新建一個標簽,默認為HEAD持灰,也可以指定一個commit id盔夜;
- 命令git tag -a <tagname> -m "blablabla..."可以指定標簽信息;
- 命令git tag可以查看所有標簽堤魁。
操作標簽:
- 命令git push origin <tagname>可以推送一個本地標簽喂链;
- 命令git push origin --tags可以推送全部未推送過的本地標簽;
- 命令git tag -d <tagname>可以刪除一個本地標簽妥泉;
- 命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽椭微;
- 如果標簽已經(jīng)推送到遠程,先從本地刪除再從遠程刪除盲链。
使用GitHub:
- 在GitHub上蝇率,可以任意Fork開源倉庫;
- 自己擁有Fork后的倉庫的讀寫權限匈仗;
- 可以推送pull request給官方倉庫來貢獻代碼瓢剿。
自定義Git:
忽略特殊文件:
- 忽略某些文件時,需要編寫.gitignore悠轩;
- .gitignore文件本身要放到版本庫里,并且可以對.gitignore做版本管理攻泼!
配置別名
搭建Git服務器:
- 要方便管理公鑰火架,用Gitosis;
- 要像SVN那樣變態(tài)地控制權限忙菠,用Gitolite何鸡。
使用SourceTree:
- 使用SourceTree可以以圖形界面操作Git,省去了敲命令的過程牛欢,對于常用的提交骡男、分支、推送等操作來說非常方便傍睹。
- SourceTree使用Git命令執(zhí)行操作隔盛,出錯時犹菱,仍然需要閱讀Git命令返回的錯誤信息。