分支管理
- 分支的做用
- 提交不完整的代碼到主分支上會致使別人不能正常開發
- 若是等代碼所有寫完再提交,存在丟失天天進度的風險
詳見:https://segmentfault.com/q/1010000010105733
- 新建與分支合併
- 過程
- Git 建立分支(例:dev) 除了增長一個dev指針外,讓HEAD指向dev,工做區的文件沒有變化
- 而後對工做區的修改和提交就是針對dev分支(HEAD指向的分支)
- 分支合併,直接將master指向dev的當前提交
- 而後能夠將dev分支(dev指針)刪掉
- 命令,例:
建立分支
建立dev分支並切換到dev分支html
git checkout -b dev
上面的命令至關於git
git branch dev
git checkout dev
切換分支github
git checkout master
- 合併指定分支到當前分支
- 正常合併
git merge dev
- 若是在這個過程以前 主分支上面的代碼也被你的同伴修改過,這樣會出現衝突,這時候使用 git status 能夠查看一下衝突的文件,而後能夠去該文件中將Git <<<<<,=====,>>>>>> 標記出的不一樣分支的內容,解決完衝突後保存,而後再進行提交一次便可
合併完成後能夠刪除dev分支數據庫
git branch -d dev
查看分支segmentfault
git branch
若是沒有合併分支就要把分支刪除,可使用:app
git branch -D 分支
注:
- 合併分支時,Git通常默認使用 Fast forward 模式,刪除分支後,會丟掉分支信息
- 使用 git merge --no-ff -m"comment" dev 會在merge分支的時候生成一個新的commit,能夠從分支歷史上看出分支信息
- 常見分支策略
- master 分支是很是穩定的,僅用來發布新版本
- dev 分支是不穩定的,在dev上幹活
- 在往下面創建一些本身的分支
- Bug分支
場景:當工做進行到一半,沒辦法提交,忽然接到一個要在兩個小時解決一個bug的通知
使用 stash功能將當前工做現場保存起來測試
git stash
- 卻換到須要修復Bug的分支,如(master),新建一個臨時分支
- 而後修改Bug,提交到臨時分支上
- 確認Bug分支沒問題的話,能夠卻換回master分支,而後合併Bug分支
- 最後刪除Bug分支
找回剛剛保存起來的工做場景,命令:網站
git stash list
#顯示 stash@{0}: WIP on dev: 6224937 add merge
而後恢復以前的工做場景,兩種方法:
- git stash apply stash@{0} 恢復後stash內容並不刪除
- git stash pop stash@{0} 恢復的同時將stash刪除了
- Feature分支
- 就是針對要開發的功能新建一個功能分支,開發完成後,完成合並後將該功能分支刪除
- 本地與遠程
- 當從遠程庫克隆的時候,Git自動將本地的master分支和遠程的master分支對應起來,遠程倉庫的默認名稱是origin
- 查看遠程庫的信息用 git remote -v
- 推送分支
經測試,無論你提交時在哪一個分支,若是執行 git push origin master 時 會將本地的master分支推送到遠程的master分支,若是執行 git push origin dev 時 ,會將本地發dev分支推送到遠程的dev分支,可是若是在dev分支上 執行 git pull origin master 時,會吧master分支上的內容拉下來而且與當前的分支合併
- 若是git pull 提示提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用 git branch --set-upstream branch-name origin/branch-name。
- 多人協做的工做模式:
- 首先嚐試 git push origin branch-name 推送本身的修改
- 若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull 視圖合併
- 若是合併有衝突則解決衝突,並在本地提交
- 沒有衝突或者解決掉衝突後,使用 git push origin branch-name 推送
- 遠程分支管理
- 推送本地分支 dev 到 遠程分支 dev 並創建關聯關係
- 遠程已經有dev 而且已經關聯本地分支dev 使用 git push
- 遠程已經有dev 可是未關聯本地dev 使用 git push -u origin/dev
- 遠程沒有dev分支 使用 git push origin dev:dev
- 刪除遠程分支 (遠程分支刪除後本地分支還在)
執行下面兩條命令
- git branch -r -d origin/branch-name #刪除對分支的追蹤
- git push origin :branch-name #刪除遠程分支
標籤管理
在發佈版本的時候,能夠在版本庫中打一個標籤,這樣就惟一肯定了打標籤時刻的版本。在須要的時候可取某個標籤的版本。標籤至關因而版本庫的一個快照,能夠自定義標籤名字,便於查找操作系統
- 管理標籤
建立標籤
git tag tag_name
上面的命令默認是打在最新提交的commit上的,若是有時候忘記打標籤的話,能夠找到歷史提交的commit id 而後打上標籤便可
git tag tag_name commit_id指針
能夠建立帶有說明的標籤,用 -a 指定標籤名,-m 指定說明文字
git tag -a
-m "blablabla..."
還能夠經過 -s 用私鑰 簽名一個標籤:
git tag -s
-m "blablabla..."
簽名採用PGP簽名,所以,必須首先安裝gpg(GnuPG),若是沒有找到gpg,或者沒有gpg密鑰對,就會報錯
- 查看標籤
- 用git show tag_name 查看標籤的說明
- git tag 查看全部標籤
- 刪除標籤
git tag -d tag_name
- 遠程標籤
建立的標籤默認只存儲在本地,不會自動推送到遠程
- 推送某個標籤到遠程
git push origin tag_name
- 一次性推送所有還沒有推送到遠程的本地標籤
git push origin --tags
- 若是標籤已經推送到遠程,要將遠程標籤刪除
- 先將本地標籤刪除 #這個其實能夠不作
git tag -d tag_name
- 從遠程刪除
git push origin :refs/tags/tag_name
忽略特殊文件
有些文件放在Git工做目錄中,可是又不能提交它們,不如數據庫密碼等配置文件,可是每次git status的時候都會顯示好多 Untracked files ... , 這能夠經過在Git 工做目錄中建立一個 .gitignore 文件,而後把要忽略的文件名填進去,Git就會自動忽略這些文件
.gitignore 參考 : 見GitHub的示例
忽略文件的原則:
- 忽略操做系統自動生成的文件,好比縮略圖等;
- 忽略編譯生成的中間文件、可執行文件等,也就是若是一個文件是經過另外一個文件自動生成的,那自動生成的文件就不必放進版本庫,好比Java編譯產生的.class文件;
- 忽略你本身的帶有敏感信息的配置文件,好比存放口令的配置文件。
配置別名
咱們有時候在面對很是長的命令會頭疼,這時候能夠給這些命令配置一個別名,這樣就可使用別名來進行相關操做了
命令:git config --global alias.別名 原名 # 注意,當原名是一個單詞的時候不須要加引號,若是超過了一個單詞,原名就須要用單引號包括
例:
git config --global alias.st status
執行過以後,下次再須要執行 git status 時就能夠直接輸入 git st 便可
示例:
git config --global alias.unstage 'reset HEAD'
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"
注意:
- 配置Git的時候,加上--global是針對當前用戶起做用的,若是不加,那隻針對當前的倉庫起做用。
- 每一個倉庫的Git配置文件都放在.git/config文件中,當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中
- 配置別名也能夠直接修改這個文件,若是改錯了,能夠刪掉文件從新經過命令配置。
本文參考: 廖雪峯的官方網站
如需轉載請註明出處:http://www.cnblogs.com/zhuchenglin/p/8820186.html