Git使用教程

 
1.在github上新建一個項目倉庫
 
2安裝客戶端msysigit
     下載路徑(官網): http://git-for-windows.github.io/
    安裝方法(百度經驗):http://jingyan.baidu.com/article/e52e36154233ef40c70c5153.html     
github 是服務端,要想在本身電腦上使用 git 還須要一個 git 客戶端,這裏選用 msysgit,這個只是提供了 git 的核心功能,並且是基於命令行的。若是想要圖形界面的話只要在 msysgit 的基礎上安裝 TortoiseGit 便可
3.建立本地版本庫文件夾
     裝完 msysgit 後右鍵鼠標會多出一些選項來,而後咱們在本地新建個文件夾(好比叫 github),右鍵選擇 Git Init Here,這樣 github 文件夾內會多出來一個 .git 文件夾,(若是沒有「Git Init Here」能夠Git Bash,進入命令行後運行「git init」,一樣能夠生成.git文件)這就表示本地 git 建立成功。右鍵 Git Bash 進入 git 命令行就能夠把剛剛新建的倉庫克隆到本地,固然咱們還須要配置下 ssh key。
 
4.配置git
首先,建立ssh key
ssh-keygen -t rsa -C "chinawjb@foxmail.com"
 
後面的 your_email@youremail.com 改成本身的郵箱,以後會要求確認路徑和輸入密碼,這裏使用默認的一路回車就行。成功的話會在 "C:\Users\Administrator\.ssh"(我本身的)下生成 .ssh 文件夾,打開 id_rsa.pub,複製裏面的 key,回到 github,進入 settings,左邊選擇 SSH keys,Add SSH Key,title 隨便填,粘貼 key。爲了驗證是否成功,在 git bash 下輸入:
 
ssh -T git@github.com
 
若是是第一次的會提示是否 continue,輸入 yes 就會看到:You've successfully authenticated, but GitHub does not provide shell access,這就表示已成功連上 github。
 
而後要設置 username 和 email,由於 github 每次 commit 都會記錄他們。
1 git config --global user.name "ChinaWJB"
2 git config --global user.email chinawjb@foxmail.com
五、上傳和克隆
而後能夠兩種操做
          (1) 克隆到本地(好比克隆 css 的項目):
git clone git@github.com:zhuyujia/css.git
 
須要注意的是:github 提供了 3 種 url 路徑(HTTPS,SSH,Subversion),通常若是帳號處於登陸狀態,那麼咱們能夠用 SSH,就像上面的代碼,若是沒有登陸的話,只能用 HTTPS 的 url 了
 
          (2)上傳文件
                    選擇要添加進倉庫的文件:            
 git add .
【 通常若是你想分享這個文件夾裏的全部代碼,就在 add後面加「.」,上面的例子就是這樣,若是傳指定的,只須要把「.」改成文件名便可】
                  
                    上面只是選擇了要加入倉庫的文件,下面添加進倉庫
 git commit -m 'Test'後面的說明必須加,不然會出現高亮代碼,沒法繼續操做
-m後面跟一個參數,表示說明,將代碼提交到GitHub後,將會在代碼文件信息上顯示這個說明】
               正式提交到github上
1 git remote add origin git@github.com:XXX/XXX.git
2 git push (-u) origin master
【若是遠程庫是空的,加「-u」, Git不但會把本地的 master分支內容推送的遠程新的 master分支,還會把本地的 master分支和遠程的 master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。若是上傳若失敗,則 git pull (-u) origin master 將其拉回來,從新再提交】
以後若是本地提交了,直接使用「git push origin master「就能夠提交到對應的遠程庫了
 
說明:
     
  1. cd test  
  2. touch README  
  3. git commit -m 'first commit'  
  4. @github.com:lzjun/test.git  
  5.  大概意思就是在本地建立test目錄,初始化,建立一個README文件,固然這個文件時空的,你能夠往裏面填內容。接下來就是add就是把README文件歸入到git的管理範圍內,

     

     

    commit:至關於把你項目的代碼,文件及全部的東西作一個快照,(比如咱們拍照),這全部的文件定格在這個時刻,以後的每一次commit也只把那些發生了改變的文件作快照。此時還並無把代碼提交到GitHub上去css

     

    remote:和GitHub創建遠程鏈接,注意這裏的"lzjun"就是個人帳戶名,這根據本身的名稱作相應的改變。這一步只在你第一次提交文件的時候出現,而且要輸入以前的pressphrases.html

     

push:就很好理解了,把文件推送到GitHub站點去。
 
 
六、幫助
     git help               在命令窗口顯示經常使用的命令
     git help git          在瀏覽器打開git的api幫助文檔
 
本地倉庫或本地工做區
七、在本地提交,提交到本地版本庫,更新後的提交也是用這兩條命令
     git add  filename.txt(git rm filename同理)
     git commit -m "描述"
      刪除文件rm同add
 
八、git status                         查看當前文件是否被修改過
     git diff  filename.txt          查看當前文件哪些地方被修改過
     git log                               查看歷史提交版本,版本號
     git log --pretty=oneline     會有條理的輸出歷史提交版本
     git reset --hard 【加上版本號的前幾位就能夠,會自動填充】該命令會返回到指定版本號的版本
     git reset --hard HEAD^     該命令是返回上一個版本
     git reset --hard HEAD        該命令只是顯示HEAD指針當前的分支的位置
     git reflog                            記錄每一條命令,會顯示執行每一條命令時當前的版本號
     git checkout -- filename     在工做區修改後 尚未add(或rm)到緩存區,能夠丟棄工做區的修改
     git reset HEAD filename      修改後已經提交到了暫存區,能夠經過該命令返回到add以前的狀態,
                                               能夠在用git checkout -- filename 丟棄工做區的修改
小結:
     場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令 git checkout -- file
 
     場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令 git reset HEAD file,就回到了場景1,第二步按場景1操做。
 
     場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考 版本回退一節,不過前提是沒有推送到遠程庫
 
9.工做區:有.git 的文件夾
   版本庫:.git 文件夾
         暫存區:.git 中的stage區
         master分支
 
  
 
遠程倉庫:
小結:   
要關聯一個遠程庫,使用命令 git remote add origin git@server-name:path/repo-name.git
關聯後,使用命令 git push -u origin master第一次推送master分支的全部內容;
此後,每次本地提交後,只要有必要,就可使用命令 git push origin master推送最新修改;
 
 
分支:
本地新建分支+合併分支+刪除分支

查看分支:git branchgit

建立分支:git branch <name>github

切換分支:git checkout <name>shell

建立+切換分支: git checkout -b <name>( " -b"參數表示建立並切換 )

合併某分支到當前分支:git merge <name>windows

刪除分支: git branch -d <name>
 
一、查看分支:git branch
*master
 
 
 
二、新建+切換分支:git checkout -b dev
     查看分支: git branch
          *dev
            master
三、在新分支上commit代碼到本地倉庫:
四、切換回master分支:git checkout master
                 +
五、合併分支:git merge dev
六、刪除分支dev: git branch -d dev
 
 
 
分支衝突
     在兩個分支分別更改了代碼,在master和dev都add和commit以後,合併時出現衝突,此時查看文件會出現:   
                         <<<<<<< HEADCreating a new branch is quick & simple.
                          =======Creating a new branch is quick AND simple.
             >>>>>>> feature1    
      注意:此時,兩個分支處於等待修改後自動合併的狀態, 只需把文件 手動修改後,再add和commit以後兩個分支就從新合併到一塊兒了。
 
     合併後經過命令:
git log --graph --pretty=oneline --abbrev-commit
或:git log --graph
 
     能夠查看到以下輸出:
*   3aeb259 delete confilict in master and dev
| \
| * d1f9b49 new a branch dev
* | b6d227b in master new
|/
* 94e8f6b change testliaoxuefeng
* f56ae93 add readme
* f32d4bf wrire a test file
* 736e83c wrire a testliaoxuefeng file
 
Bug分支
    
     修復bug時,咱們會經過建立新的bug分支進行修復,而後合併,最後刪除;
     當手頭工做沒有完成時,先把工做現場 git stash一下,而後去修復bug,修復後,再 git stash pop,回到工做現場。
     恢復現場:兩種方法
          一是:用 git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用 git stash drop來刪除;
          另外一種是:用 git stash pop,恢復的同時把stash內容也刪了:
     能夠用 git stash list 來查看剛纔的工做現場去哪了。
 
Feature分支
      添加一個新功能時,你確定不但願由於一些實驗性質的代碼,把主分支搞亂了,因此,每添加一個新功能,最好新建一個feature分支,在上面開發,完成後,合併,最後,刪除該feature分支。
      可是在合併的時候,不須要這個新功能了,則,須要 強制刪除該分支 git branch -D <name>,普通刪除刪除不了,由於沒有合併。
     小結:
          開發一個新feature,最好新建一個分支;
          若是要丟棄一個沒有被合併過的分支,能夠經過 git branch -D <name>強行刪除
 
多人協做

多人協做的工做模式一般是這樣:api

  1. 首先,能夠試圖用git push origin branch-name推送本身的修改;瀏覽器

  2. 若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;緩存

  3. 若是合併有衝突,則解決衝突,並在本地提交;bash

  4. 沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream 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,若是有衝突,要先處理衝突。

 
標籤管理
     建立標籤:
     
  • 命令git tag <name>用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;
 
  • git tag -a <tagname> -m "blablabla..."能夠指定標籤信息;
 
  • git tag -s <tagname> -m "blablabla..."能夠用PGP簽名標籤;
  • 命令git tag能夠查看全部標籤
 
     使用標籤:
  • 命令git push origin <tagname>能夠推送一個本地標籤;

  • 命令git push origin --tags能夠推送所有未推送過的本地標籤;

  • 命令git tag -d <tagname>能夠刪除一個本地標籤;

  • 命令 git push origin :refs/tags/<tagname>能夠刪除一個遠程標籤。

使用GitHub之fork
  • 在GitHub上,能夠任意Fork開源倉庫;

  • 本身擁有Fork後的倉庫的讀寫權限;

  • 能夠推送pull request給官方倉庫來貢獻代碼。

 
 
 ————————參考廖雪峯老師官網
相關文章
相關標籤/搜索