記錄我學github的路程(三)


2015-12-22 更新

一、Bug分支

1,假設如下場景,你正在dev分支工作,突然接到一個修復代號為101的bug的任務時,dev的東西還沒不能提交,但是bug需要馬上修復。

Git提供了一個stash功能,可以把當前工作現場存儲起來,等以后恢復現場后繼續工作。

2,使用方法:

$ git stash //  類似於保護現場

注:執行上面時可能會出現這個錯,no local changes to save,有可能是沒有切換到dev分支,或者切換后沒有在工作區進行修改,總之,多試試

然后切換回需要的分支進行修復,這里假設是master分支

$ git checkout master

再從master創建臨時分支

$ git checkout -b issue-101

這里進行修改,並提交

$ git add readme.txt

$ git commit -m "fix bug 101"

這里就算是修復完成了,然后切換回master分支,完成合並,最后刪除 issue-101 分支

$ git checkout master

$ git merge --no-ff -m "merged bug fix 101" issue-101  // 合並

$ git branch -d issue-101

到這里就修復完成了,切換回dev分支

$ git checkout dev

$ git status  // 可以查看一下工作區是干凈的

查看剛才的工作現場

$ git stash list  //   可以看到工作現場還在,git把stash內容存在某個地方了,但是需要恢復,有兩個方法

(1) $ git stash pop   // 恢復的同時把stash內容也刪了

(2) $ git stash apply // 恢復后,stash內容並不是刪除,需要 $ git stash drop 來刪除

刪除后可以再次查看一下

$ git stash list

2,可以多次stash,恢復的時候先用$ git stash list 查看,然后恢復到指定的stash,如下:

$ git stash apply stash@{0}

 

4,小結:修復bug時,通過創建新的bug分支進行修復,然后合並,最后刪除

手里有工作沒有完成時,先把工作縣城 git stash一下,然后去修復bug,修復完了再 git stash pop,回到工作現場。

 

2015-12-28  更新

Feature分支

1,添加新功能時,肯定不希望因為一些實驗性質的代碼把主分支搞亂了,所以,添加一個新功能,最好新建一個feature分支,在上面開發,完成后,合並,最后刪除該分支。

2,實例:假設你接到一個新任務,代號為vulcan

(1)准備開發: $ git checkout -b feature-vulcan

(2)5分鍾后,開發完畢,查看一下 $ git status

(3)切回dev目錄,$ git checkout dev  若一切順利,feature分支和bug分支是蕾絲的,合並然后刪除

(4)此時,新功能要取消,就要刪除這個分支 $ git branch -d feature-vulcan

這時候Git會提醒你,feature-vulcan還沒有合並,若刪除則會丟失修改。需要強行刪除

$ git branch -D feature-vulcan  // 強行刪除

 

   多人協作

 從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,並且,遠程倉庫的默認名稱是origin

1,查看遠程庫的信息 $ git remote

$ git remote -v    //   查看更詳細的信息

上面顯示了可以抓取和推送的origin的地址,若沒有推送權限,就看不到push的地址

 

  推送分支

1,推送分支:就是把該分支上的本地提交推送到遠程庫。推送時,要制定本地分支,這樣Git就會把該本地分支推送到遠程庫對應的遠程分支上

$ git push origin master  //   要推送dev分支,就把master換成dev

2,哪些分支需要推送,哪些不要呢,這里有幾個原則:

(1)master分支是主分支,因此要時刻與遠程同步

(2)dev分支是開發分支,團隊成員都需要在上面工作,所以也要與遠程同步

(3)bug分支只用於在本地修復bug,可以用不要推送到遠程,除非老板要看看你到底修復了幾個bug

(4)feature分支是否推送到遠程,取決於你是否和你的小伙伴合作在上面開發

 

  抓取分支

1,多人協作時,大家都會往master和dev分支上推送各自的修改

2,模擬一個小伙伴,可以在另一台電腦(注意要把SSH Key添加到GitHub)或者同一台電腦的另一個目錄下克隆。

實例:

先切換到另外一個目錄:

這里開始克隆

再次提醒一下:要將SSH Key添加到GitHub,相當於告訴你的GitHub賬戶信任這台電腦,不知道准不准確,這里希望大神解答。

 友情提示:有時候 會出現這個錯誤

  fatal: Not a git repository (or any of the parent directories): .git

  提示說沒有.git這樣一個目錄,解決辦法如下:

  $ git init   就可以了

 

2016-01-03 更新   新的一年希望自己能變得更好

1,運行$ git clone  可能會出錯:warning: You appear to have cloned an empty repository  // 克隆一個空目錄

或者  fatal: destination path '.' already exists and is not an empty directory  // 目標路徑已存在,且不為空

解決方法 : 參考自: http://blog.csdn.net/lein_wang/article/details/8182790

$ ls -a

$ rm .git/ -rf

不過我這樣試了還是沒用,只好把目錄刪除的東西全刪了, 我是這樣做的  

$ rm * -rf   //  這樣后面再重新 git clone 一下就好了

 

//  git branch的一些用法,可以參考這個博客  http://blog.csdn.net/xiruanliuwei/article/details/6919319

 

2,有的運行 Git clone之后,查看分支發現是空的,這時候要注意要切換進你clone過來的那個目錄才可以看見分支,不要跟我一樣傻逼似,哎

接上面的抓取分支

(1)當你克隆之后,默認只能看到本地的master分支,就像上面那個圖一樣

(2)現在,你的小伙伴要在dev分支下開發,就必須創建遠程origin的dev分支到本地:

$ git checkout -b dev origin/dev

(3)這樣,小伙伴就可以在dev上繼續修改,然后時不時的把dev分支push到遠程

$ git commit -m "add dev 20160103"

$ git push origin dev

(4)你的小伙伴已經向origin/dev分支推送了他的分支,而碰巧你也對同樣的文件進行了修改並且推送:

$ git push origin dev //  可能會出錯,因為你的小伙伴的最新提交和你試圖推送的提交有沖突,Git會提示我們解決的方法,先用git pull把最新的提交從origin/dev中拿下來,然后在本地合並,解決沖突,最后推送:

$ git pull // 也可能會失敗,因為沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示設置dev分支與遠程origin/dev分支的鏈接

$ git branch --set-upstream dev origin/dev

再pull。

若pull成功后有沖突,需要手動解決,解決的方法和分支管理中的解決沖突一樣,解決后再push

 

3,多人協作的模式通常是這樣

(1)首先,可以試圖用git push origin branch-name退送自己的修改

(2)若退送失敗,則因為遠程分支比你的本地更新,需要先用git pull 合並

(3)若合並有沖突,則解決本地沖突,並在本地提交

(2)沒有沖突或解決了沖突,再用git push origin branch-name推送就可以了

 

4,小結:

(1)查看遠程庫信息,使用git remote -v

(2)本地新建的分支若不推送到遠程,別人是看不見的

(3)在本地創建和遠程分支對應的分支,用$ git checkout -b dev origin/dev  顏色部分表示分支名字,最好一致

(4)git pull提示 "no tracking information",則說明本地分支沒有與遠程分支建立鏈接關系,用命令

  $ git branch --set-upstream dev origin/dev  建立本地分支與遠程分支的關聯

 

2016-01-04  更新

標簽管理:發布一個版本時,通常會在版本庫中打上一個標簽,這樣就唯一確定了打標簽時刻的版本,將來無論什么時候,取某個標簽的版本,就是把那個打標簽的時刻的歷史版本取出來

 

Git的標簽雖然是版本庫的快照,但其實就是只想某個comit的指針(跟分支很像,但是分支可以移動,而標簽不能移動)

 

  創建標簽

1,首先切換到需要打標簽的分支上,

$ git branch

$ git checkout master

2,然后敲擊 git tag name 就可以打一個標簽

$ git tag v1.0

3,查看所有標簽

$ git tag

 

4,默認標簽是打在最新提交的commit上的。有時候忘記打了,比如今天周五了,周一的標簽還沒有打,怎么辦

方法是找到歷史提交的commit,然后打上就可以了

$ git log --pretty=oneline --abbrev-commit

然后找到對應的分支,打上就可以,比如這里對 "1127 change",打標簽,就這樣做

$ git tag v0.01 2c8de67

 

5,注意標簽不是按時間排序的,而是按字母,可以用git show tagname 查看標簽信息

 

6,還可以創建帶有說明的標簽, -a指定標簽名, -m說明文字

$ git tag -a v0.1 -m "version 0.1 release" 98e56b0

$ git show v0.1  //  再查看一下

 

7,還可以通過-s用私鑰簽名一個標簽

$ git tag -s v0.2 -m "signed version 0.2 release"  7478f13

 簽名采用PGP簽名,因此,必須先安裝gpg,否則就會報錯,

若報錯,請參考GnuPG幫助文檔配置key

// 關於這個可以查看這個http://wenku.baidu.com/link?url=zGiQnJuni2FQFfmeRuXa_novFIQrElE8esw7bB-P5t7jJNFw_2_3vhfBIIrmmJIUWbW5H1CYfh14PdhkNkH2Xx2MbWGvaqN9Yofh28n0vtG###

// windows下好像叫這個  Gpg4win ,

 

8,小結:

(1)$ git tag tagname 用於創建一個標簽,默認為HEAD,也可以指定一個commit ID

(2)-a tagname -m "balabala..."  可以指定標簽信息

(3)-s tagname -m "balabala..." 可以用PGP簽名標簽

(4)$ git tag 可以查看所有標簽

 

2016-01-05  更新

   操作標簽

1,標簽打錯了,也可以刪除。創建的標簽都只存儲在本地,不會自動推送到遠程,所以,打錯的標簽可以在本地安全的刪除

$ git tag -d v0.1

 

2,要推送某個標簽到遠程,

$ git push origin v1.0

 

3,一次性推送全部尚未推送到遠程的本地標簽

$ git push origin --tags

 

4,推送到遠程后的標簽刪除起來比較麻煩,先從本地刪除

$ git tag -d v0.9

然后從遠程刪除

$ git push origin :refs/tags/v0.9

可以登錄GitHub查看有沒有刪除標簽

 

 

20160106

第一篇就說明了是參看廖雪峰老師的東西做的筆記,突然間好多人看了,好激動。還是把廖雪峰老師的主頁放上來http://www.liaoxuefeng.com/

廖老師的東西比較權威靠譜一點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM