GIT基礎詳解
阿新 • • 發佈:2020-11-18
聲名
git場景操作均在gitee上進行實現
場景實現測試倉庫連結: https://gitee.com/LaBiXiaoChen7/git-demo
現github中master已更名為main,以下操作按照gitee版本進行操作,敬請諒解
下載與相關資源
Mac 安裝 brew(最新教程,絕對可行,一行程式碼搞定,不報錯)
工作流程
一般工作流程如下: 克隆 Git 資源作為工作目錄。 在克隆的資源上新增或修改檔案。 如果其他人修改了,你可以更新資源。 在提交前檢視修改。 提交修改。 在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交。
基本概念
工作區:存在於你pc端的本地檔案目錄 暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index檔案(.git/index)中,所以我們把暫存區有時也叫作索引(index) 版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫 圖中左側為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage/index),標記為 "master" 的是 master 分支所代表的目錄樹。 圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。 圖中的 objects 標識的區域為 Git 的物件庫,實際位於 ".git/objects" 目錄下,裡面包含了建立的各種物件及內容。 當對工作區修改(或新增)的檔案執行 git add 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的檔案內容被寫入到物件庫中的一個新的物件中,而該物件的ID被記錄在暫存區的檔案索引中。 當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(物件庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。 當執行 git reset HEAD 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。 當執行 git rm --cached <file> 命令時,會直接從暫存區刪除檔案,工作區則不做出改變。 當執行 git checkout . 或者 git checkout -- <file> 命令時,會用暫存區全部或指定的檔案替換工作區的檔案。這個操作很危險,會清除工作區中未新增到暫存區的改動。 當執行 git checkout HEAD . 或者 git checkout HEAD <file> 命令時,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及工作區中的檔案。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。
說明:
workspace:工作區
staging area:暫存區/快取區
local repository:或本地倉庫
remote repository:遠端倉庫
gitee的連線驗證
-
首先需要到github上去建立一個自己的帳戶,記住使用者名稱和郵箱。如果是windows系統,需下載git客戶端;如果是蘋果系統,則直接用終端就可以,無需下載。
-
在github上建立倉庫。
-
ssh key是連線你的電腦和GitHub伺服器的一把鑰匙,只有兩者建立了聯絡才能把你本地的程式碼提交到github上。首先要獲取到ssh key公鑰。
1.在終端輸執行命令:
ssh-keygen
2.再執行:
pbcopy < ~/.ssh/id_rsa.pub
這時候會把公鑰拷貝到剪貼簿中
-
將剪貼簿中ssh key貼上到Key的位置上,title可以隨便取。
-
回到終端,設定使用者名稱和郵箱,最好與註冊的github一致。這個使用者名稱和郵箱是非常重要的,因為每次Git提交都會使用該資訊。它被永遠的嵌入到了你的提交中。在團隊開發中,可以清楚地看到是誰的提交。在終端中輸入命令:
git config user.name ‘XXX’
git config user.email ’XXX@XXX’
-
將github上的專案克隆到本地機子上。
git clone (這裡面的內容是在下圖紅圈中複製的地址)
克隆下來後,本地就可以與遠端倉庫自由通訊了。
配置使用者名稱和郵箱
#去掉 --global 引數只對當前倉庫有效
git config --global user.name 'your-name' 配置name
git config --global user.email 'your-email' 配置email
git config --global --list 檢視使用者名稱和郵箱資訊
#編輯 git 配置檔案
git config -e 針對當前倉庫
git config -e --global 針對系統上所有倉庫
配置.gitignore檔案
.gitignore
為了解決有些檔案,使用者不想上傳或者不想被其他人所看到而產生的解決辦法。
在Git工作區的根目錄下建立一個特殊的.gitignore
檔案,然後把要忽略的檔名填進去,Git就會自動忽略這些檔案
忽略檔案的原則:
忽略作業系統自動生成的檔案,比如縮圖等;
忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,比 如Java編譯產生的.class檔案;
忽略你自己的帶有敏感資訊的配置檔案,比如存放口令的配置檔案。
建立倉庫
git init 本地生成倉庫
在GitHub或者gitee中按照命令進行本地和遠端倉庫的連線即可
git clone repo-name 克隆專案到本地
git clone repo-name dir-name 克隆專案到指定的目錄
提交與修改
git add ./file-name .代表當前資料夾下面所有檔案,新增檔案到倉庫中
git status 檢視倉庫當前的狀態,顯示有變更的檔案
git status -s -s引數來獲得簡短的輸出結果
git diff <file-name> 比較暫存區和工作區的檔案的不同
git commit <file-name> 提交暫存區檔案到本地倉庫
git rm file-name 刪除工作區檔案
git mv file-name dir-name 移動檔案到其他位置
git mv old-file-name dir-name/new-file-name 將檔案移動到一個資料夾下面,並且更改檔名
檢視提交日誌
git log 檢視歷史提交記錄,使用commit命令的過程會被記錄下來
#使用 --oneline 檢視歷史記錄的簡潔的版本
git log --oneline
#使用--reverse 逆向顯示所有的日誌
git log --reverse
#使用--graph檢視歷史中什麼時候出現了分支、合併
git log --graph
#使用--author檢視指定使用者的提交日誌
git log --author=user-name
#使用--since和--before 或者 --until和--after 來指定時間進行檢視
#檢視 Git 專案中三週前且在四月十八日之後的所有提交,執行程式碼(使用 --no-merges 選項以隱藏合併提交)
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
git blame <file-name> 檢視指定檔案的修改記錄,以列表形式顯示修改記錄
git show 檢視最新的commit
git show <HEAD-id> 檢視commit的所有修改
git show <HEAD-id> <file-name> 檢視commit中的檔案的修改
還原檔案
git checkout -- file-name 還原工作區的檔案修改內容,還原到上一步
git reset <HEAD>
#--soft 引數用於回退到某個版本
git reset --soft HEAD
#-hard 引數撤銷工作區中所有未提交的修改內容,將暫存區與工作區都回到上一次版本,並刪除之前的所有資訊提交
git reset --hard HEAD
注意:謹慎使用 –hard 引數,它會刪除回退點之前的所有資訊。
HEAD 說明:
HEAD 表示當前版本
HEAD^ 上一個版本
HEAD^^ 上上一個版本
HEAD^^^ 上上上一個版本
以此類推...
可以使用 ~數字表示
HEAD~0 表示當前版本
HEAD~1 上一個版本
HEAD^2 上上一個版本
HEAD^3 上上上一個版本
以此類推...
#還原已提交暫存區檔案的場景
git add file-name #已將修改的內容檔案提交到暫存區
git status file-name #檢視檔案是否被提交到暫存區的狀態,顯示為綠色,代表被git進行了檔案追蹤
git reset HEAD file-name 將暫存區檔案還原到工作區,撤銷檔案追蹤
git checkout -- file-name 將已撤銷的檔案進行檔案還原
#將單個檔案還原到某一個版本
git checkout HEAD-id -- file-name
新增標籤
git tag 檢視標籤
git tag <tag-name> 新增標籤到最近一次的commit
git tag <tag-name> <log-id> 新增標籤到某一次commit
git push origin <tag-name> 將標籤推送到遠端倉庫中
git tag -d <tag-name> 刪除標籤
分支處理
多用於合作協同開發
git brach 檢視分支情況
git branch branch-name 建立分支
#演示
git branch Tom
git branch Jack
#輸出:
Jack
Tom
* master
#此處按照name的首字母進行排序,不是按照建立時間進行排序
#*的位置標示當前所在的分支位置
git branch -d brach-name 刪除分支
#不能刪除當前所在的分支
#另一種情況就是當一個分支進行commit的時候,也不能直接刪除
#如果你確定要刪除的話,強制刪除
git branch -D branch-name 強制刪除分支
git checkout branch-name 切換分支
#切換分支時,Git會用該分支的最後提交的快照替換你的工作目錄的內容, 所以多個分支不需要多個目錄
git checkout -b new-branch-name 建立分支並直接切換到新分支中
git merge branch-name 合併分支
#當有衝突的時候,一般兩種辦法:
#1、協商之後手動刪除衝突部分程式碼,進行提交
#2、使用一下命令來設定按照當前分支內容為主
git merge --abort
git log --graph 檢視版本路線
操作遠端倉庫
git remote -v 顯示所有的遠端倉庫
git remote show [remote] 顯示某個遠端倉庫的資訊
git remote add [repo-name] [url] 新增遠端版本庫
git remote rm repo-name 刪除遠端倉庫
git remote rename old-name new-name 修改倉庫名
#拉取遠端倉庫並且進行關聯,修改操作遠端倉庫
git fetch 遠端獲取程式碼庫
git log -av 檢視原生代碼與遠端版本庫之間的關係
git checkout -b new-branch-name remore-branch-name 建立本地分支,並且與遠端分支進行關聯
git push origin --delete <branch-name> 將遠端倉庫分支進行刪除
#刪除前確認分支處理情況,一定要完成對程式碼的處理
#主要用於刪除本地沒有,遠端建立的分支
git checkout -b new-branch-name remore-branch-name 建立本地分支,並且與遠端分支進行關聯
tips:本文資源