git入門

git

1.git簡介

1.1 誰創建了git,為了什麼?

  • linux的創始人在壯大linux的時候需要收到各地上傳的程式碼,需要版本控制系統,最初有公司免費支援。後來社區有人試圖破解別人的系統,公司停用要求破解者道歉。然後大牛拒絕道歉,就自己寫了個源碼管理,就是現在的git
  • 總結:牛逼的人就是牛逼

1.2 git是什麼?

  • 分散式版本管理系統
    • 分散式:就是不管你身在何地,都可以通過電腦使用git管理你的文件
    • 版本:我們在開發的時候,會有不同的版本。(就像你寫一篇文章、初稿、檢查、潤色,每一步都是一個版本)
    • 管理系統:就是一個管理工具

1.3 git的特點

  • 版本控制:支援多人同時開發程式碼,解決找回歷史程式碼的問題。(可以使用git快樂多人運動,並且不用擔心因為版本更新出現問題無法找到歷史程式碼產生問題)
  • 分散式:可以存儲在一個倉庫中,然後多台電腦可以同時在各個地方進行開發操作。
  • 史上最大的同性交友網站:GitHub(技術就是用的人越多,就會發現更多的問題,然後修復後變得更加強大)

2.安裝配置

2.1 安裝配置

  • linux/ubuntu上安裝

    sudo apt-get install git
    
  • windows上安裝

    • 推薦使用中國源 //npm.taobao.org/mirrors/git-for-windows/
    • 找到一個簡易的安裝版本 Git-2.25.0.rc2.windows.1-64-bit.exe (個人使用的是帶exe後綴的版本)
    • 簡單操作,直接重複點擊下一步,直至安裝完畢。
  • 檢查git是否安裝好

    • linux/ubuntu上直接使用命令git查看
    • windows點擊右鍵,看是否出現了兩個關於git的操作命令

2.2 配置倉庫

  • 指定管理的目錄

    • linux/ubuntu上直接在需要管理的文件夾下使用終端輸入初始化命令
    • windows上在需要管理的目錄下點擊右鍵,然後點git bash here輸入初始化命令
    git init # 初始化命令
    
  • 隱藏文件.git

    • 裡面存儲了大量關鍵資訊,請勿輕易修改或者刪除

2.3 了解工作區

  • 工作區是指我們剛才指定管理目錄下的區域,管理目錄下的所有文件。
  • 文件的狀態分為兩種:
    • 已管理,沒有修改並非新增的文件。(我習慣性的用一個非專業辭彙工作區靜態文件表示
    • 已修改或者新增的文件。(modified

3.git簡單的操作

3.1 創建第一個文件並且提交到版本庫

  • 第一次提交時:進行全局郵箱配置,否則會在提交版本庫的時候報錯。
git add 文件名 # 提交指定的文件到暫存區
git add . # 提交所有`modified`狀態文件到暫存區
git config --global user.email 配置郵箱
git config --global user.name 配置用戶名
git commit -m '版本資訊' # 提交暫存區的文件到版本庫

3.2 檢測|檢查

git status # 檢測文件狀態
git log # 查看當前日誌記錄
git reflog # 查看所有的日誌記錄

3.3 更新版本庫

  • 有了第一個版本之後,我們後續的操作是在第一個版本的基礎上進行改動。
  • 我們增加或修改的東西,會在當前版本的基礎下記錄下來,提交到版本庫生成新的版本。
  • 新版本只會記錄改動|新增部分,另外會生成一個指針指向上一個版本的地方。(這個指針是我理解git抽象出來的,具體待考證!)
修改文件
git add . # 提交所有的修改到暫存區
git commit -m '版本資訊' # 提交暫存區內容到版本庫,生成新的版本

3.4 對比文件的不同

  • 工作區與版本庫相同的文件對比

    git diff HEAD -- 文件
    # 顯示資訊用`+ -`區別各自獨有內容
    # `+`表示工作區文件獨有內容
    # `-`表示HEAD(當前使用版本)獨有內容
    
  • 版本庫之間相同文件的比較

    git diff HEAD HEAD~2 -- 文件 # 比較當前版本與前兩個版本之間的區別
    # `+`當前版本的獨有內容
    # `-`表示前兩個版本獨有的內容
    

4.git三大區域

4.1 工作區

  • 參考2.3處內容
  • 日常本地用於開發,可見的區域。(一般是指我們進行git管理的文件夾)

4.2 暫存區

  • 介於工作區與版本庫之間的緩衝區

4.3 版本庫

  • 保留所有已提交的版本

4.5 三大區域日常操作

  • 工作區進行日常開發
  • 開發完成後添加至暫存區
  • 暫存區提交到版本庫
  • 同時三個區域也可以進行回滾操作

5.回滾操作

5.1 從工作區動態到工作區靜態

git checkout

5.2 從暫存區回滾到工作區的動態

git reset HEAD

5.3 從版本庫回滾到暫存區

git reset --soft 版本號

5.4 從版本庫回滾到工作區動態

git reset --mix 版本號

5.5 從版本庫回滾到工作區靜態

git reset --hard 版本號

5.6 版本號怎麼查?

git reflog # 查詢版本資訊
# 結果開頭部分就是版本號

6.分支

6.1 什麼是分支?

  • 我們的提交的新版本,會在之前版本基礎上僅保存改動(新增|修改|刪除)了的部分內容。
  • 這些版本可以抽象成串在一條線上,我們一般把這個成為主支。(master是主支的默認名)
  • 而在某一個版本上,我們創建一個新的支線進行其他開發處理,就叫做分支。
  • 形象的說明:工廠有一條主流水線,我們在某個節點可以拿主幹線的東西到其他的分流水線進行工作,工作完畢後將東西放回主流水線。

6.2 分支的特點

  • 隔離環境,避免開發流程對主幹線產生不必要的污染。
  • 分工協作,每個分支進行不同的工作,提高效率。

6.3 分支的基本操作

  • 查看當前的分支

    git branch
    
  • 創建分支

    git branch <name>
    
  • 切換分支

    git checkout <name>
    
  • 快速創建並切換到分支

    git checkout -b <name>
    
  • 刪除分支

    git branch -d <name>
    

6.4 合併分支

  • 合併分支:將兩條支線的內容進行合併,並且生成新的版本。

    git checkout <name> # 切換到要進行合併的分支
    git merge <name1> # 將<name1>合併到<name>上
    

6.5 分支衝突

  • 兩個分支對相同文件相同位置進行了不同的操作,提交到版本庫,然後進行合併的時候系統無法判斷保留哪一個修改。

  • 實際開發中,每個部門或者不同的人在分支上進行操作會產生分支衝突。這個時候需要我們與產生分支衝突的協作對象商量,並手動解決分支衝突。

6.6 解決分支衝突

  • 找到產生衝突的分支管理者,進行協商手動編寫更改衝突,重新提交新的版本。

    git log --graph 查看帶有分支示意圖的日誌
    
  • 有時候合併分支不會成功,但是它也不會產生衝突。

  • 我們可以禁用fast-forward禁用快速合併進行提交

    git merge --no--ff -m '版本資訊' # 禁用快速提交
    

6.7 保存工作狀態

  • 當我們編輯一半的時候,需要切換到其他分支工作,需要保存當前工作狀態,以便切換回來之後繼續工作。

    git stash # 保存工作狀態
    git stash list # 獲取保存的工作狀態
    git stash pop # 恢復工作現場
    

7.GitHub

7.1 GitHub的作用

  • 充當最大的同性交友平台
  • 充當一個分散式的中央伺服器(我們之前的版本都是保存在本地)
  • 多台計算器可以通過中央伺服器,進行程式碼的交換。

7.2 如何使用github

  • 註冊登錄帳號

  • 創建倉庫

  • 添加ssh倉庫

    • 在電腦中生成SSHKey

      ssh-keygen -t ras -C "註冊郵箱"
      
    • user/adminstor中找到文件.ssh/下的id_rsa.pub

    • 複製文件下的內容,粘貼到githubssh配置中

7.3 推送本地項目到github

  • 推送時,若遠程倉庫不為空倉庫時

    git pull --rabse origin master # 合併遠程倉庫與本地庫
    
  • 一般推送

    # 將我們的遠程地址加一個別名
    git remote add origin //xxxx
    # 從本地推送到遠端倉庫地址
    git push -u origin 需要推送的分支名稱
    -u # 默認提交到origin地址的指定分支
    # 不使用-u就是手動指定
    

7.4 下載遠程倉庫項目到本地

  • 克隆程式碼

    # 克隆程式碼(第一次本地沒有需要拉取的程式碼)
    git clone //xxxxxx (內部已經實現了 別名添加)
    
  • 更新程式碼

    # 更新程式碼
    git pull origin dev
    # 上面更新程式碼相當於下面兩句
    git fetch origin dev
    git merge orgin/dev
    
  • 克隆出錯時,可嘗試下列程式碼

    eval "$(ssh-agent -s)"
    ssh-add
    

7.5 上傳分支

git push origin 分支名稱

7.6 本地分支跟蹤遠程

git branch --set-upstream-to=origin/遠程分支 本地分支

7.7 從遠程分支拉取程式碼

git pull origin 分支名
Tags: