1. 程式人生 > >Git 與 GitHub 入門級

Git 與 GitHub 入門級

pam n) 暫存區 新版 是個 gin https ID and

今天我們來搞一下Git
這東西雖然沒啥搞頭兒,但是開發當中還必須得會用,誰讓你我都是苦逼的開發呢~~~~

一、下載與安裝

這玩意簡單,給你賦個圖片,自己研究一下~~~~
1.官網:https://git-scm.com/downloads

2.下載:

技術分享圖片

3.主要事項:
還有安裝的路徑,盡量都是英文,別整中文

技術分享圖片

4.安裝完成,需要做進一步的設置

  • 打開這個圖標:
    技術分享圖片

  • 打開後的樣子(版本不一樣,可能有點差別,大同小異)
    技術分享圖片

  • Git是分布式版本控制系統,所以需要填寫用戶名郵箱作為一個標識。

    命令:
    設置用戶名:git config --global user.name "你自己的用戶名"
    設 置 郵 箱: git config --global user.email "你自己的郵箱"
    技術分享圖片

  • 驗證是否設置成功
    在你的Windows系統中,C:\Users\admin下(大部分是這個路徑),找到 .gitconfig 文件裏可以看到跟你配置的信息一致,說明設置成功
    技術分享圖片

二、實操

1.創建版本庫

首先在你的任意盤符下,執行以下操作,我的習慣是在某個盤下建個文件夾來當做git的版本庫(暫時就是一個文件夾,還不是版本庫,這點要明確)

比如:我在 G:\JavaInstall 下建個文件夾叫gitHome
那麽就在gitHome 文件夾的裏面 一定是裏面 ,點擊鼠標右鍵,找到 Git Bash 打開,出現如圖:
技術分享圖片

這個其實就是用git的窗口打開的這個文件,主要這個路徑,用於創建版本庫

  • 下面開始創建版本庫
    命令 : git init

技術分享圖片

此時可以看到 在你的gitHome 文件夾下出現個 .git (若沒有顯示,則去開啟隱藏文件)

技術分享圖片

所以此時,你的 .git 就是你的本地庫

  • 打開.git 會出現以下文件,我來做下詳解

技術分享圖片

2.文件新建+狀態查看+新增+提交+新增文件內容

  • ① 查看本地版本庫的各個文件的狀態 : git status

    例子:是用 touch 命令新建一個 a.txt文件,但此時要明確,a.txt文件還不屬於git版本庫,必須加入到git版本庫才行
    技術分享圖片

    重要的一點,此時執行了git add a.txt之後,雖然應加入到了git的版本庫,但是此時只是加入到了git的臨時

    庫,必要進行 commit

    執行 git commit a.txt 出現以下信息
    技術分享圖片

    表示此時你需要鍵入你改變的信息,否則‘#‘部分將會被忽略,並且將會提交一個空文件
    意思就是 你需要再寫一遍 你要提交的文件,那太麻煩了,於是 q! 命令,不保存退出

    使用另一種方法:
    命令: git commit -m "create file" a.txt

    技術分享圖片

    OK,完成以上的步驟,才算真正的將a.txt 文件納入git管理;

  • ② 修改剛才的a.txt文件,會發現git的不同之處

    命令:vim a.txt 增加幾條數據

    【註】:在git更新一個文件時,原本已經將a.txt文件納入到管理中了,修改該文件後,還需要再納入一遍,它不會將原有已經在版本庫中的文件直接保存

    命令依次:git add a.txt
    git commit -m "update file" a.txt
    git status

3.日誌+版本號+對比不同

3.1查看日誌:

① git log a.txt  

技術分享圖片

② git log --pretty=oneline a.txt  

技術分享圖片
技術分享圖片

這兩種查看git日誌的方式  
第一個顯示信息比較全,作者啊,時間啊,以及對文件是create 還是 update啊,都顯示的清晰,但是往往格式太占用屏幕,顯示不全  
第二種,顯示的就是具體做個啥操作,一行顯示完全,不去關心誰創建的,誰修改的等信息  

3.2 版本號

在執行更新操作的時候,盡量加個版本號:  
如:git commit -m "update file 01" a.txt  
這個 "01" 就是版本號,每次對該文件進行更新操作時,盡量給個版本,方便以後查找對比  

3.3 對比不同

命令:git diff a.txt

技術分享圖片

4. 版本回退+版本穿梭+版本撤銷

4.1 版本回退

命令:git reset --hard HEAD^     【註】:HEAD是個指針,^:表示回退一步

技術分享圖片

4.2 版本穿梭

① 命令: git reflog a.txt  查看所有日誌記錄的指針

技術分享圖片

② 根據上一步的指針,選擇要回退到哪一個位置

技術分享圖片

以上是回退一步,或者回到指定的步驟  
那麽當要回退到很多步呢? 
使用命令:git reset --hard HEAD~4   :表示回退4步  

技術分享圖片
4.3 版本撤銷

命令:git checkout -- a.txt

技術分享圖片

小總結:
1.庫,首先得是個git庫 git init 
2.得有個東西管理,新建個文件 touch a.txt
    之後,向裏面填東西,首次的話叫納入git管理  git add a.txt
3.git commit -m "create file" a.txt  提交到自己的本地庫
4.git log 查看git的各種日誌
5.git status 查看當前版本庫的狀態 
6. git commit 相當於往前走,那麽 就有往後退 git reset --hard HEAD^ 表示往後退一步
    其中,一個 ^ 表示退一步,多個 ^ 表示退多步
7.版本穿梭 用git reflog a.txt  查出他的全部指針版本號
    再結合 "git reset --hard 7位版本號" 穿梭到想要的版本
8.撤銷  使用 "git checkout -- 文件名"  

5. 理解工作區+版本庫+暫存區

5.1 工作區

工作區(Working Directory):就是你電腦本地硬盤目錄

5.2 版本區

版本庫(Repository):工作區有個隱藏目錄.git,它就是Git的本地版本庫

5.3 暫存區

暫存區(stage):一般存放在"git目錄"下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。

技術分享圖片

當在工作區時  撤銷要用 "git checkout -- a.txt"
當在暫存區時  撤銷要用 "git reset HEAD a.txt" 再 "git checkout -- a.txt"
當在版本區時  撤銷要用 "git reset -hard HEAD^"

Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。  

技術分享圖片

我們把文件往Git版本庫裏添加的時候,是分兩步執行的:
第一步是用“git add”把文件納入Git管理,實際是把本地文件修改添加到暫存區;
第二步是用“git commit”提交更改,實際上就是把暫存區的所有內容提交到當前分支 。

因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以commit就是往master分支上提交更改。

可以簡單理解為,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。一旦提交完後,如果你又沒有對工作區做任何修改,那麽工作區就是“幹凈”的。即:nothing to commit (working directory clean)。

用“git diff HEAD -- filename”命令可以查看工作區和暫存區裏面最新版本的區別。
新建過撤銷未add: git checkout  -- 文件名
撤銷已add未commit:先git  reset HEAD  文件名 再 git checkout -- 文件名
撤銷已add已commit:       git reset –hard HEAD^  


所以,一定要明確,當前所操作的文件是在git的哪一個區,才能保證執行前進和回退的正確性

5.4 刪除命令

① git rm a.txt 
② git commit -m "delete a.txt" a.txt

即 在git中刪除要執行兩步操作,雖然刪了,但是還得提交一下 

5.5 分支(查看+新建+切換+合並(分支名)+刪除)

  • 5.5.1 查看分支
    • 命令:git branch
      技術分享圖片
  • 5.5.2 新建分支
    • 命令:git branch 分支名
    技術分享圖片
    技術分享圖片
  • 5.5.3 切換分支
    • ① 命令: git checkout 分支名

    技術分享圖片

    • ② 命令:git branch -b 分支名 :表示把分支和切換用一個命令完成

    技術分享圖片

    而且,子分支會把master(主分支)裏的內容,copy出同樣的一份到自己的分支裏,目的就是盡量不要在主分支中去操作

  • 5.5.4 合並分支
    • 命令:git merge 分支名

    技術分享圖片

    【註】:在子線上幹活,在主線上合並
  • 5.5.5 刪除分支
    • 命令 git branch -d 分支名

    技術分享圖片

    【註】:要保證子線跟主線的內容一致,所以每次合並完之後,刪除子線,然後再新建個子線,把內容和主線永遠保持一致

5.6 版本沖突

  • 子分支 在a.txt文件內增加數據
    技術分享圖片

  • 主分支 在a.txt同一個位置增加不同的數據
    技術分享圖片
  • 合並 發現存在沖突
    技術分享圖片

  • 查看沖突 ,進行人工幹預,將沖突的符號刪除
    技術分享圖片

  • 刪除後的效果 (千萬別把隊友提交的數據刪除了)
    技術分享圖片
  • 加入版本庫 然後提交
    技術分享圖片

    這樣沖突就解決了,就是手動把沖突刪掉

三、GitHub 使用 與 git 協同辦公

github是一個git項目托管網站,主要提供基於git的版本托管服務

github是一個基於git的代碼托管平臺, Git 並不像 SVN 那樣有個中心服務器。目前我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作。 你就需要將數據放到一臺其他開發人員能夠連接的服務器上

1.GitHub的應用:

技術分享圖片

 第一步 註冊+檢查.ssh秘鑰:由於你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗證信息(No such file or directory表示第一次)

技術分享圖片

第二步 創建SSH Key: ssh-keygen -t rsa -C [email protected]成功的話會在~/下生成.ssh文件夾,進去,打開id_rsa.pub,復制裏面的key。  

技術分享圖片
技術分享圖片

第三步 粘貼id_rsa.pub 的內容到 GitHub,註意粘貼的內容一定要恰好,不要多一個空格或者少一個空格  
      操作依次為:登錄GitHub → 頭像位置找到settings → 選擇左側菜單的 SSH and GPG keys → 左上角 New SSH key → 起個名 粘貼公鑰 

技術分享圖片
技術分享圖片
技術分享圖片

第四步 測試連通性: ssh -T [email protected]  

技術分享圖片

表示連接成功了,此時再回到你的 .ssh 文件 ,會多了一個名字為 known_hosts文件

技術分享圖片

第五步 本地 → github遠程庫

    現在的情景是,我在本地創建了一個OA項目後,我又想在GitHub創建一個OA項目,並且讓這兩個倉庫進行遠程同步
    5.1  先在本地新建好一個git項目  

技術分享圖片

    5.2  到Github上新建一個同名的空項目 (是同名  我這裏後來又建了一個,忘記修改,都默認oa.txt即可)

技術分享圖片
技術分享圖片

    5.3  本地和github上的倉庫進行關聯
         命令:git remote add origin https://github.com/zzyybs/oa.git

技術分享圖片

    5.4 把本地庫的內容推送到遠程git push命令,實際上是把當前分支master推送到遠程
        命令:git push -u origin master
        
        命令:git pull origin master : 是從遠程庫的master 下載到 本地庫的 master

技術分享圖片
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

第六步 github遠程庫 → 本地

現在的情景是,我們從零開發,那麽最好的方式是先創建遠程庫,然後從遠程庫克隆

6.1  登陸GitHub,創建一個新的倉庫,名字叫OA2
6.2  遠程庫OK,下一步是用命令git clone克隆一個本地庫
    Git clone [email protected]:xxx/oa2.git

技術分享圖片

7.遠程交互模型 -- 上

技術分享圖片

技術分享圖片

技術分享圖片

7.Git交互模型-下

一般工作流程如下:

    1 克隆 Git 資源作為工作目錄。

    2 在克隆的資源上添加或修改文件。

    3 如果其他人修改了,你可以更新資源。

    4 在提交前查看修改。

    5 提交修改。

    6 在修改完成後,如果發現錯誤,可以撤回提交並再次修改並提交。

技術分享圖片

8.Fork

現在的情景是,用叉子把別人的東西(copy no cut)叉到你碗裏~
就是把別人的項目clone一份,但是owner變成自己,這樣你就可以在遵守Open source license的前提下任意修改這個項目了。

相當於你在原項目的主分支上又建立了一個分支,你可以在該分支上任意修改,如果想將你的修改合並到原項目中時,可以pull 
request,這樣原項目的作者就可以將你修改的東西合並到原項目的主分支上去,這樣你就為開源項目貢獻了代碼,開源項目就
會在大家共同的努力下不斷壯大和完善。

技術分享圖片

9.解決Git push時重復輸入用戶名密碼
    C:\Users\admin目錄下新建名字為_netrc的文件並編輯該文件寫如下內容:
        machine github.com
        login 你的用戶名
        password 你的密碼

    比如:
        machine github.com
        login li4
        password 123

技術分享圖片

10.Git 常用命令小總結
   mkdir:         XX (創建一個空目錄 XX指目錄名)
   pwd:          顯示當前目錄的路徑。
   git init          把當前的目錄變成可以管理的git倉庫,生成隱藏.git文件。
   touch           xx文件或者新建文件
   git add XX       把xx文件添加到暫存區去。
   git commit –m “XX”  提交文件 –m 後面的是註釋。
   git status        查看倉庫狀態
   git diff  XX      查看XX文件修改了那些內容
   git log          查看歷史記錄
   git reset  --hard HEAD^
   cat XX         查看XX文件內容
   git reflog       查看歷史記錄的版本號id
   git checkout -- XX  把XX文件在工作區的修改全部撤銷。
   git rm XX          刪除XX文件
   git remote add origin https://github.com/zzyybs/testgit 關聯一個遠程庫
   git push –u(第一次要用-u 以後不需要) origin master 把當前master分支推送到遠程庫
   git clone https://github.com/arjrzhouyang/testgit  從遠程庫中克隆
   git checkout –b dev  創建dev分支 並切換到dev分支上
   git branch  查看當前所有的分支
   git checkout master 切換回master分支
   git merge dev    在當前的分支上合並dev分支
   git branch –d dev 刪除dev分支
   git branch name  創建分支
   git remote 查看遠程庫的信息
   git remote –v 查看遠程庫的詳細信息
   git push origin master  Git會把master分支推送到遠程庫對應的遠程分支上  

 常用基本操作命令25個左右

Git 與 GitHub 入門級