廖雪峯git教程學習筆記2

   本地git倉庫和github倉庫之間的傳輸是經過SSH加密的,因此:git

  1. 註冊GitHub帳號

 

  1. 建立SSH key。在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,若是已經有了,可直接跳到下一步。若是沒有,打開Shell(Windows下打開Git Bash),建立SSH Key:

    ssh-keygen -t rsa -C youremail@example.com

  2. 登錄GitHub,打開account setting,增長SSH key
    GitHub容許你添加多個Key。假定你有若干電腦,你一下子在公司提交,一下子在家裏提交,只要把每臺電腦的Key都添加到GitHub,就能夠在每臺電腦上往GitHub推送了。

 

 

若是在本地建立了一個git倉庫,又在GitHub建立了一個,而且想讓這兩個倉庫同步,步驟:github

  1. 登錄GitHub,create a new repo,在本地倉庫目錄下運行命令: 

    git remote add origin git@github.com:[GitHub帳戶名]/[GitHub倉庫名].git

    上面的[GitHub帳戶名]用本身的GitHub帳戶名替代,[GitHub倉庫名]用欲關聯的GitHub倉庫名替代,origin是默認的Git遠程倉庫叫法,也能夠改爲別的(注意冒號後沒有空格)

 

  1. 把本地倉庫的內容同步到遠程倉庫:

    git push –u origin master

    加了-u是第一次推送master分支時的寫法,Git不但會把本地的master分支內容推送到遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令,之後的推送能夠不加

 

 

從遠程倉庫克隆:app

若是先創建了遠程倉庫,想要把他克隆下來:ssh

  1. 將命令行目錄切換到欲生成本地倉庫的目錄
  2. 輸入命令:

    git clone git@github.com: [GitHub帳戶名]/[GitHub倉庫名].git

 

 

 

 

 

 

master是git 的一個主分支,在倉庫中還能夠有不少分支,用git branch 分支名 建立,HEAD是一個指針,指向哪一個分支就說明正在哪一個分支上工做,在命令行窗口中輸入命令git branch,能夠查看倉庫中有哪些分支,前面帶*號的說明HEAD指向這個分支(正在這個分支工做):加密

 

分支管理:spa

在以前的提交裏,一直只有一條分支master,HEAD指向的分支,表示當前正在工做的分支,修改或建立新文件後產生的新提交都增添到這個分支裏,命令行

 

 

每次提交,master分支都會向前移動一步,這樣,隨着你不斷提交,master分支的線也愈來愈長。指針

 

當咱們建立新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:orm

 

 修改或建立新文件後產生的新提交都增添到dev這個分支裏(∵HEAD指向dev),master分支不會產生新的提交!也就是其內容不會被改變!blog

當在dev上的修改完成後,想要把他合併到master裏,則只須要將master指針指向dev,以後也能夠把dev指針刪除掉。

 

查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>(注意合併分支時HEAD指向的當前分支,<name>寫的是非HEAD指向的分支)

若是合併時採用命令(加上no—ff,表示禁用fast forward):

git merge --no-ff -m "common" <name>

合併分支時,加上--no-ff參數就能夠用普通模式合併,合併後的歷史(用git log –graph查看)有分支,能看出來曾經作過合併,而fast forward合併就看不出來曾經作過合併

刪除分支:git branch -d <name>

 

解決衝突:

假設在dev分支修改了倉庫中的某個文件並提交,再切換回master,打開這個文件,會發如今dev中作的修改並無出如今這裏,若是咱們此時再對這個文件作修改並提交,再使用git merge命令合併兩個分支時就會產生衝突錯誤,可以使用git status查看衝突內容,再次打開這個文件,會發現衝突內容被寫入這個文件,此時須要在這個文件裏手動修改解決衝突,再次用git merge命令合併分支

 

 

臨時退出:

假設當前分支a下的工做沒有完成,新建立的文件或新的修改還沒完成還不能提交,又須要退出去分支b作別的工做,就須要git stash命令,將當前工做儲藏起來,再用git checkout  b切換到分支b去作別的工做,完成別的工做以後,要回到原來的工做,須要在再回到分支a,此時用git status命令查看工做區可見工做區是乾淨的,須要使用git stash pop(stash內容刪除,可以使用git stash list命令查看stash內容)git stash apply(stash內容不刪除)命令來恢復原來的工做。

 

若是要丟棄一個沒有被合併過的分支,能夠經過git branch -D <name>強行刪除。

 

查看遠程倉庫信息:git remote(或git remote –v查看更詳細信息)

推送分支:git push origin master

推送其餘分支,好比devgit push origin dev

·         master分支是主分支,所以要時刻與遠程同步;

·         dev分支是開發分支,團隊全部成員都須要在上面工做,因此也須要與遠程同步;

·         bug分支只用於在本地修復bug,就不必推到遠程了,除非老闆要看看你每週到底修復了幾個bug

·         feature分支是否推到遠程,取決於你是否和你的小夥伴合做在上面開發。

 

 

使用git clone從遠程庫克隆後獲得的本地庫只有master分支,若是須要在dev上進行開發,則須要使用如下命令建立本地dev分支:

git checkout -b dev origin/dev

這樣之後就能夠把修改後的dev分支push到遠程庫,若是有人先推送了新的提交到origin/dev,則後來者再推送就會產生衝突,解決方法:使用

git pull

命令把最新的提交從origin/dev抓取下來,而後再本地合併,方法和解決衝突中同樣,再push回去

 

若提示:There is no tracking information for the current branch. Please specify which branch you want to merge with。。。。

表示沒有指定本地dev分支與遠程origin/dev分支的連接,根據提示,設置devorigin/dev的連接:

git branch --set-upstream-to=origin/dev dev

即:

 

 

 

 

可以使用git remote –v查看遠程庫名和地址:

 

 

相關文章
相關標籤/搜索