2019.3.6 Github學習 &Git學習

Github學習

1.使用Github

1.1 目的

藉助github託管項目代碼

1.2 基本概念

  • 倉庫(Repository)
倉庫的意思是:即你的項目,你想在Github上開源一個項目,那就必需要新建一個Repository,若是你開源項目多了,就有多個Repository
  • 收藏(star)
倉庫主頁stat按鈕,意思爲收藏項目的人數。
  • 複製克隆項目(fork)
點擊fork以後會在記得倉庫下面複製一個如出一轍的倉庫下來
  • 發起請求(full request)
發送請求,這個實際上是基於fork的,若是別人在你基礎上作了改進,後來以爲改進的不錯,應該要把這些改進讓更多的人收益,因而就想把本身的改進合併到原有的項目中,這時候他就能夠發起一個請求(簡稱PR),若是改進的很好元有項目的人贊成以後就會接受PR
  • 關注(watch)
watch某個項目,那麼之後只要這個項目有任何更新,你都會第一時間收到關於這個項目的通知和提醒。
  • 事務卡片(Issue)
發現代碼bug,可是目前沒有成型代碼,須要討論時用:


2.Github主頁

帳號建立成功或點擊地址欄Github圖標均可以進入Github主頁額;改主頁左側主要顯示用戶動態以及關注用戶或關注倉庫的動態;右側顯示全部的git庫

2.1 倉庫主頁

倉庫主頁主要是顯示項目的信息,如:項目代碼,版本,收藏/關注/fork狀況等

2.2 我的主頁

我的信息:頭像,我的簡介,關注個人人,我關注的人,我關注的Git庫,個人開源項目,我貢獻的開源項目等信息


3.倉庫管理

3.1 New Repository

3.2 create new file

3.3 edit file

點擊文件名能夠看到詳細內容並編輯文件;點擊提交信息能夠看到修改內容java

3.4 Upload file

3.5 find file

快捷鍵 Tgit



4.Github Issues

做用:發現代碼BUG,可是目前沒有成型代碼,須要討論時用,或者使用開源鮮蘑菇出現問題時使用

4.1 使用

上圖須要模擬兩個帳號來處理問題,只有一個因此只能這樣了;問題解決以後記得點擊close issuegithub



5.基本概念實戰

倉庫

我的主頁

倉庫相關操做

克隆項目

發起請求

在本身fork的項目裏面作相應的修改,而後full request 纔會提交到對方的倉庫裏面,別人贊成了纔會顯示本身的文件。Merger full requestvim



6.開源項目貢獻流程

6.1 新建Issue

提交使用問題或者建議想法

6.2 Pull Request

步驟:
    1.fork項目
    2.修改本身倉庫的項目代碼
    3.新建pull request
    4.等待做者審覈,合併到製做者倉庫中


7.Git安裝和使用

7.1 什麼是Git?

Git是目前世界上最早進的分佈式版本控制系統

7.1 目的

經過Git管理Github 託管項目代碼

7.2 下載安裝

地址:https://git-scm.com/
服務器

紅色標記是一個是命令行界面,一個圖形化界面app

中間沒有圖的都是Next步驟,最後剩下的三步是默認Nextssh

7.3 測試安裝是否成功

點擊桌面,鼠標右擊,出現以上Git 就是成功分佈式



8 介紹Git基本工做原理

8.1 Git工做區域

  • Git Repository (Git倉庫)
最終肯定的文件保存到倉庫,成爲一個新的版本,而且對他人可見
  • 暫存區(Index/Stage)
暫存已經修改的文件最後統一提交到git倉庫中
  • 工做區(Working Directory)
添加、編輯、修改可見等動做
  • 遠程倉庫(Remote)

8.2 向倉庫中添加文件流程

git status
    git add hello.java

    git status
    git commit -m "提交描述"
    
    git status

8.3 Git與SVN的最主要區別?

SVN是集中式版本控制系統,版本庫是集中放在中央服務器的額,而幹活的時候,用的都是本身的電腦,因此首先要從中央服務器哪裏獲得最新的版本,而後幹活,作完項目以後,須要把本身作完的模塊推送到中央服務器。集中式版本控制系統必須和聯網才能工做,若是在局域網還能夠,帶寬夠大,速度夠快,若是在互聯網下,網速慢就要等了。

Git是分佈式版本控制系統,那麼它就沒有中央服務器的額,每一個人的的電腦就是一個完整的版本庫,這樣,工做的時候就不須要聯網了,由於版本都是在本身的電腦上,既然每一個人的電腦都有一個完整的版本庫,那多我的如何協做呢?兩我的同時修改了一個文件。這時候兩我的之間只須要把各自的修改推送給對方就能夠相互看到修改的內容。

9 Git初始化及倉庫建立和操做

9.1 Git基礎設置

  • 設置用戶名
git config --global user.name='qichunlin'
  • 設置用戶名郵箱
git config --global user.email='737795279@qq.com'
  • 查看設置
git config --list

該設置在Github倉庫主頁顯示誰提交了該文件
由於Git是分佈式版本控制系統,因此須要填寫用戶名和郵箱做爲一個標識。
svn

9.2 Git操做

初始化一個新的倉庫(文件夾)

添加文件到工做區

查看文件狀態

添加文件到暫存區

將文件添加到本地Git倉庫

GIt撤銷和刪除文件操做

本地刪除文件
    rm a.java

從Git庫中刪除文件
    git commit -m '刪除文件'

刪除工做區文件,而且將此次刪除放入暫存區
    git rm [file1] [file2] ...
沒有提交操做以前想恢復文件
    git checkout -- filename

中止追蹤指定文件,但該文件會保留在工做區
    git rm --cached [file]
  • 撤銷操做
git checkout -- readme.md

查看文件修改內容

git diff README.md

版本回退

git log

git --pretty=oneline

git reset --hard HEAD^


===============

  • 縮短顯示提交的信息,
    學習

  • 版本回退兩種方法
第一種是:git reset --hard HEAD^ 那麼若是要回退到上上個版本只需把HEAD^ 改爲 HEAD^^ 以此類推。那若是要回退到前100個版本的話,使用上面的方法確定不方便,咱們可使用下面的簡便命令操做:git reset --hard HEAD~100 便可。

  • 回退到最新版本
先獲取到版本號:git reflog  
    在使用:    git reset --hard e24b613


注意

全部的版本控制系統,只能跟蹤文本文件的改動,好比txt文件,網頁,全部程序的的代碼等,Git也不例外,版本控制系統能夠告訴你每次的改動,可是圖片,視頻這些二進制文件,雖能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是知道圖片從1kb變到2kb,可是修改了啥,版本控制也不知道。


10.Git克隆操做

目的

將遠程倉庫(github對應的項目)複製到本地

把本地庫和遠程庫關聯起來設置

git remote add origin https://github.com/qichunlin/test.git

上傳本地庫到遠程庫

git push -u origin master

git push

提交到遠程服務器(報錯)

看下面的解決辦法



10.Github配置遠程倉庫

10.1 建立SSH Key

在用戶主目錄下,看看有沒有.ssh目錄,若是有,再看看這個目錄下有沒有id_rsa和 id_rsa.pub  這兩個文件,若是有的話,直接跳過此以下命令,若是沒有的話,打開命令行,輸入以下命令:
   ssh-keygen -t rsa –C 「youremail@example.com」


id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,能夠放心地告訴任何人。

第一種寫法是錯誤的加了空格,第二種纔是對的。 注意:輸入完成以後,必定要回車三次!!!!!!

vim 打開文件複製內容

ssh -keygen

提交Github

登陸github,打開」 settings」中的SSH Keys頁面,而後點擊「Add SSH Key」,填上任意title,在Key文本框裏黏貼id_rsa.pub文件的內容。

獲取Github上的地址,在本地Git輸入

git remote add origin https://github.com/qichunlin/test.git

推送

git push -u orgin master

     因爲遠程庫是空的,咱們第一次推送master分支時,加上了 –u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。推送成功後,能夠馬上在github頁面中看到遠程庫的內容已經和本地如出一轍了,上面的要輸入github的用戶名和密碼


後面若是想提交 直接輸入 git push origin master

測試



11. 建立與合併分支

在版本回退裏,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。HEAD嚴格來講不是指向提交,而是指向master,master纔是執行提交的,因此,HEAD指向的就是當前分支。
  • 建立dev分支,而後切換dev分支上
git checkout 命令加上 –b參數表示建立並切換,至關於以下2條命令

   git branch dev          git checkout dev

git branch查看分支,會列出全部的分支,當前分支前面會添加一個星號。
  • 在dev分支上作操做,並切換到主分支

  • 在主分支master上合併分支
git merge命令用於合併指定分支到當前分支上

注意到上面的Fast-forward信息,Git告訴咱們,此次合併是「快進模式」,也就是直接把master指向dev的當前提交,因此合併速度很是快。

  • 合併完成,刪除dev分支

總結建立與合併分支操做

總結建立與合併分支命令以下:

查看分支:git branch

建立分支:git branch name

切換分支:git checkout name

建立+切換分支:git checkout –b name

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

刪除分支:git branch –d name


12. 如何解決衝突

  • 新建一個新分支 fenzhi1,在readmemd添加一行內容,而後提交

  • 切換到master分支上,也在同一行添加內容

  • 在master分支上來合併fenzhi1

Git用<<<<<<<,=======,>>>>>>>標記出不一樣分支的內容,其中<<<head是指主分支修改的內容,>>>>>fenzhi1 是指fenzhi1上修改的內容

  • 分支管理策略
一般合併分支時,git通常使用」Fast forward」模式,在這種模式下,刪除分支後,會丟掉分支信息,如今咱們來使用帶參數 –no-ff來禁用」Fast forward」模式。

流程:
    建立一個dev分支。
    修改readme.txt內容。
    添加到暫存區。
    切換回主分支(master)。
    合併dev分支,使用命令 git merge –no-ff -m 「註釋」 dev
    查看歷史記錄

合併dev分支 -no-ff 表示禁用fast forward:
     git merge --no-ff -m 'merge with no-ff' dev

分支策略:首先master主分支應該是很是穩定的,也就是用來發布新版本,通常狀況下不容許在上面幹活,幹活通常狀況下在新建的dev分支上幹活,幹完後,好比上要發佈,或者說dev分支代碼穩定後能夠合併到主分支master上來。


13.Bug分支

在開發中,會常常碰到bug問題,那麼有了bug就須要修復,在Git中,分支是很強大的,每一個bug均可以經過一個臨時分支來修復,修復完成後,合併分支,而後將臨時的分支刪除掉。
   好比我在開發中接到一個404 bug時候,咱們能夠建立一個404分支來修復它,可是,當前的dev分支上的工做尚未提交。

git stash 將當前的工做現場隱藏起來,等之後恢復現場繼續工做

建立issue-bug分支來修復bug;
首先咱們要肯定在那個分支上修復bug,好比我如今是在主分支master上來修復的,如今我要在master分支上建立一個臨時分支

修復完成後,切換到master分支上,並完成合並,最後刪除issue-404分支。

回到原來分支工做

工做現場

工做現場還在,Git把stash內容存在某個地方了,可是須要恢復一下,可使用以下2個方法:

1.git stash apply恢復,恢復後,stash內容並不刪除,你須要使用命令git stash drop來刪除。
   2.另外一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。

14.多人協做

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

fetch 抓取 push 推送

  • 推送分支
推送分支就是把該分支上全部本地提交到遠程庫中,推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上: 使用命令 git push origin master

遠程README

本地README

推送文件到遠程

OK 若是咱們如今要推送到其餘分支,好比dev分支上,咱們仍是那個命令 git push origin dev

master分支是主分支,所以要時刻與遠程同步。
一些修復bug分支不須要推送到遠程去,能夠先合併到主分支上,而後把主分支master推送到遠程去。

  • 抓取分支

    先推送fenzhi1到遠程去

咱們的小夥伴要在fenzhi1分支上作開發,就必須把遠程的origin的fenzhi1 分支到本地來,因而可使用命令建立本地fenzhi1分支:

git checkout –b fenzhi1 origin/fenzhi1

推送遠程

相關文章
相關標籤/搜索