天天看點

git筆記記錄

廖雪峰Git教程學習記錄。

0、常用指令總結:

  ​

​pwd​

​指令用于顯示目前目錄

​  git init ​

​指令把這個目錄(自己建的檔案夾)變成Git可以管理的倉庫(必須切換到目前檔案夾下面執行這個指令)

  ​

​ls -ah 或者 ls -a ​

​指令可以看見預設隐藏的目錄(比如git init之後有個.git目錄,如果看不到,就可以執行這個指令,可能.git目錄是隐藏狀态)

  cat readme.txt  //在指令行中打開readme.txt檔案,隻是檢視,不能修改

vi readme.txt

1、檢視電腦是否安裝git

  直接在指令行輸入git,然後回車。如下圖(Mac系統部分截圖):

  

git筆記記錄

2、在Mac OS X上安裝Git

如果你正在使用Mac做開發,有兩種安裝Git的方法。

一是安裝homebrew,然後通過homebrew安裝Git,具體方法請參考homebrew的文檔:​​http://brew.sh/​​。

第二種方法更簡單,也是推薦的方法,就是直接從AppStore安裝Xcode,Xcode內建了Git,不過預設沒有安裝,你需要運作Xcode,選擇菜單“Xcode”->“Preferences”,在彈出視窗中找到“Downloads”,選擇“Command Line Tools”,點“Install”就可以完成安裝了。

git筆記記錄

Xcode是Apple官方IDE,功能非常強大,是開發Mac和iOS App的必選裝備,而且是免費的!

備注:我自己在Mac上安裝時下載下傳的git安裝軟體。

3、在Windows上安裝Git

在Windows上使用Git,可以從Git官網直接​​下載下傳安裝程式​​​,(網速慢的同學請移步​​國内鏡像​​),然後按預設選項安裝即可。

安裝完成後,在開始菜單裡找到“Git”->“Git Bash”,蹦出一個類似指令行視窗的東西,就說明Git安裝成功

git筆記記錄
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"      

因為Git是分布式版本控制系統,是以,每個機器都必須自報家門:你的名字和Email位址。你也許會擔心,如果有人故意冒充别人怎麼辦?這個不必擔心,首先我們相信大家都是善良無知的群衆,其次,真的有冒充的也是有辦法可查的。

注意​

​git config​

​​指令的​

​--global​

​參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名和Email位址。

4、建議用UTF-8編碼

Microsoft的Word格式是二進制格式,是以,版本控制系統是沒法跟蹤Word檔案的改動的,如果要真正使用版本控制系統,就要以純文字方式編寫檔案。

因為文本是有編碼的,比如中文有常用的GBK編碼,日文有Shift_JIS編碼,如果沒有曆史遺留問題,強烈建議使用标準的UTF-8編碼,所有語言使用同一種編碼,既沒有沖突,又被所有平台所支援。

5、初始化git倉庫 和 添加檔案

  初始化一個Git倉庫,使用​

​git init​

​指令。(注意要在我們建的檔案夾下面,把目錄變為Git可以管理的倉庫)

  添加檔案到Git倉庫,分兩步:

    1. 使用指令​

​git add <fil​

​​

​e>​

​,注意,可反複多次使用,添加多個檔案;

    2.使用指令​

​git commit -m <message>​

​,完成。

6、檢視送出曆史記錄

  ​

​git log ​

​指令可以告訴我們曆史記錄

  ​

​git log --pretty=oneline 指令檢視簡潔的送出曆史記錄​

7、回退到某個版本 和 回到未來的版本

  ​

​git reset --hard HEAD^   //回退到上一個版本​

  cat <fileName> //檢視檔案内容,即檢視是否回退到了檔案的上個版本

  git log     //檢視現在版本庫的狀态,此指令可以幫我們确定要回退到哪個版本

  ​

​git reflog //​

​用來記錄你的每一次送出的指令曆史,以便确定要回到未來的哪個版本

8、.git目錄檔案是什麼

  我們檔案夾裡面的代碼部分算是工作區。

  .git檔案的目錄不算是工作區,而是Git的版本庫。

9、撤銷修改

  如果修改的檔案在工作區,還沒放到暫存區:

    ​

​git checkout -- readme.txt   //丢棄工作區的修改​

  如果修改的檔案在暫存區:

    ​

​git reset HEAD readme.txt  //把暫存區的修改撤銷掉​

    git status    //檢視一下,暫存區沒有修改了,本地工作區有修改

    git checkout -- readme.txt  //繼續撤銷工作區修改(然後 git status 檢視)

10、删除檔案

  rm test.txt   //删除工作區的檔案(檔案如果沒有做commit送出,隻在工作區,用此指令删除即可)

  git status  //檢視下狀态,如果版本倉庫裡面有的話,删除了本地的,倉庫裡面還存在。

  git rm test.txt   //工作區檔案删除,但是版本庫裡面還有,就用此指令删除。

  git commit -m "remove test.txt"  //删除版本倉庫以後,再做個送出。

11、添加遠端庫

  登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,建立一個新的倉庫。

  

git筆記記錄

  在Repository name填入​

​learngit​

​,其他保持預設設定,點選“Create repository”按鈕,就成功地建立了一個新的Git倉庫:

  

git筆記記錄

  git remote add origin git@server-name:path/repo-name.git  //關聯一個遠端庫(注意server-name為自己的github賬戶名)

  git push -u origin master  //關聯後,第一次推送master分支所有内容

  git push origin master  //第一次推送後,以後的每次本地送出後,可以用此指令推送最新修改

  備注:由于遠端庫是空的,我們第一次推送​

​master​

​​分支時,加上了​

​-u​

​​參數,Git不但會把本地的​

​master​

​​分支内容推送的遠端新的​

​master​

​​分支,還會把本地的​

​master​

​​分支和遠端的​

​master​

​分支關聯起來,在以後的推送或者拉取時就可以簡化指令。

12、從遠端庫克隆

  git clone <url>  //要知道倉庫位址,用git clone 後面跟位址的方式克隆遠端倉庫的代碼到本地檔案夾

備注:

    要克隆一個倉庫,首先必須知道倉庫的位址,然後使用​

​git clone​

​指令克隆。

    Git支援多種協定,包括​

​https​

​​,但通過​

​ssh​

​​支援的原生​

​git​

​協定速度最快。

13、建立與合并分支(Git鼓勵大量使用分支)

    檢視分支:​

​git branch​

    建立分支:​

​git branch <name>​

    切換分支:​

​git checkout <name>​

    建立+切換分支:​

​git checkout -b <name>​

    合并某分支到目前分支:​

​git merge <name>​

    删除分支:​

​git branch -d <name>​

14、合并分支時的沖突解決

    當Git無法自動合并分支時,就必須首先解決沖突。解決沖突後,再送出,合并完成。

    解決沖突就是把Git合并失敗的檔案手動編輯為我們希望的内容,再送出。

    用 ​

​git log --graph ​

​指令可以看到分支合并圖。

15、分支管理政策(不用Fast-forward模式,即不用快進模式)

Fast-forward模式見 分支管理/建立與合并分支 一節

  首先,仍然建立并切換​

​dev​

​分支:

    git checkout -b dev

  修改readme.txt檔案,并送出一個新的commit:

    git add readme.txt

    git commit -m "add merge"

  現在切回master分支:

    git checkout master

  準備合并dev分支,請注意--no-ff 參數,表示禁用Fast forward(本次合并要建立一個新的commit,是以加上​

​-m​

​參數,把commit描述寫進去)

    git merge --on-ff -m "merge with no-ff" dev

  合并後,我們用git log檢視分支曆史

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

備注:合并分支時,加上​

​--no-ff​

​​參數就可以用普通模式合并,合并後的曆史有分支,能看出來曾經做過合并,而​

​fast forward​

​合并就看不出來曾經做過合并。

16、Bug分支的修複

    修複bug時,我們會通過建立新的bug分支進行修複,然後合并,最後删除;

    當手頭工作沒有完成時,先把工作現場​

​git stash​

​​一下,然後去修複bug,修複後,再​

​git stash pop​

​,回到工作現場。

17、多人協作  && 推送分支

  git remote  檢視遠端倉庫的資訊

  git remote -v  檢視遠端倉庫更詳細的資訊

  

  推送分支,就是把該分支上的所有本地送出推送到遠端庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上:

  git push origin master  推送本地master分支的所有送出到遠端倉庫

  如果要推送其他分支,比如 dev 分支,就改成:

  git push origin dev   推送本地dev分支的所有送出到遠端倉庫

 

多人協作的工作模式通常是這樣:

  1. 首先,可以試圖用​

    ​git push origin <branch-name>​

    ​推送自己的修改;
  2. 如果推送失敗,則因為遠端分支比你的本地更新,需要先用​

    ​git pull​

    ​試圖合并;
  3. 如果合并有沖突,則解決沖突,并在本地送出;
  4. 沒有沖突或者解決掉沖突後,再用​

    ​git push origin <branch-name>​

    ​推送就能成功!

如果​

​git pull​

​​提示​

​no tracking information​

​​,則說明本地分支和遠端分支的連結關系沒有建立,用指令​

​git branch --set-upstream-to <branch-name> origin/<branch-name>​

​。

這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

小結:

  • 檢視遠端庫資訊,使用​

    ​git remote -v​

    ​;
  • 本地建立的分支如果不推送到遠端,對其他人就是不可見的;
  • 從本地推送分支,使用​

    ​git push origin branch-name​

    ​​,如果推送失敗,先用​

    ​git pull​

    ​抓取遠端的新送出;
  • 在本地建立和遠端分支對應的分支,使用​

    ​git checkout -b branch-name origin/branch-name​

    ​,本地和遠端分支的名稱最好一緻;
  • 建立本地分支和遠端分支的關聯,使用​

    ​git branch --set-upstream branch-name origin/branch-name​

    ​;
  • 從遠端抓取分支,使用​

    ​git pull​

    ​,如果有沖突,要先處理沖突。

18、Rebase 操作

  • rebase操作可以把本地未push的分叉送出曆史整理成直線;
  • rebase的目的是使得我們在檢視曆史送出的變化時更容易,因為分叉的送出需要三方對比。