Git 操作大全【圖解清晰】

一、Git命令行操作

1.1本地庫初始化

進(jìn)入文件夾
git init
注意:生成的 .git 目錄中存放的是本地庫相關(guān)文件,不要?jiǎng)h除

1.2設(shè)置簽名

  • 項(xiàng)目(倉庫)級(jí)別僅在當(dāng)前本地庫有效

    git config user.name tom  #設(shè)置用戶名tom
    git config user.email fu@qq.com #設(shè)置用戶郵箱
    
  • 信息保存位置:.git/config 文件

  • 系統(tǒng)用戶級(jí)別僅在當(dāng)前登錄的操作系統(tǒng)用戶有效

    git config --global user.name tom
    git config --global user.email fu@qq.com
    

僅僅加了一個(gè) --global

優(yōu)先級(jí)別:項(xiàng)目級(jí)別 > 系統(tǒng)級(jí)別

就近原則:項(xiàng)目級(jí)別優(yōu)先于系統(tǒng)用戶級(jí)別,二者都有時(shí)采用項(xiàng)目級(jí)別的簽名

如果只有系統(tǒng)用戶級(jí)別的簽名,就以系統(tǒng)用戶級(jí)別的簽名為準(zhǔn)

二者都沒有不允許的

  • 信息保存位置:~/.gitconfig 文件

1.3基本操作

1.3.1 狀態(tài)查看

git status   #查看工作區(qū)、暫存區(qū)狀態(tài)

1.3.2 添加

git add fileName  #指定文件
git add . #所有
說明:將工作區(qū)的文件添加到暫存區(qū)

1.3.3 提交

git commit -m 'commit message' fileName
說明:將暫存區(qū)內(nèi)容提交到本地庫

1.3.4 查看歷史記錄

git log 

git reflog  #常用
說明:HEAD@{移動(dòng)到當(dāng)前版本需要多少步}

git log --greph #圖形顯示,更直觀

git log --pretty=oneline #漂亮一行顯示

git log --oneline #簡(jiǎn)潔顯示

多屏顯示控制方式:
空格向下翻
b 向上翻
q 退出

1.3.5 前進(jìn)后退

  • 基于索引值(推薦

    git reset --hard 指針位置
    例子:git reset --hard a6ace91 #回到這個(gè)狀態(tài)
    
  • 使用 ^ 符號(hào)只能后退

    git reset --hard HEAD^
    例子:git reset --hard HEAD^^
    注意:幾個(gè) ^ 表示后退幾步
    
  • 使用 ~ 符號(hào)只能后退

    git reset --hard HEAD~n
    例子:git reset --hard HEAD~3
    注: n 表示后退 n 步
    

1.3.6 reset的三個(gè)參數(shù)比較

soft: 
  - 僅本地庫移動(dòng) HEAD 指針
mixed:
  - 在本地庫移動(dòng) HEAD 指針
  - 重置暫存區(qū)
hard:
  - 在本地庫移動(dòng) HEAD 指針
  - 重置暫存區(qū)
  - 重置工作區(qū)

1.3.7 刪除文件并找回

  • 前提:刪除前,文件存在的狀態(tài)提交到了本地庫
  • 相當(dāng)于建立一個(gè)快照,雖然刪除了,但只要添加到暫存區(qū),就能找回
git reset --hard [指針位置]
刪除操作已經(jīng)提交到本地庫:指針位置指向歷史記錄
刪除操作尚未提交到本地庫:指針位置指向 HEAD

1.3.8 文件差異比較

git diff [文件名]
將工作區(qū)中的文件和暫存區(qū)進(jìn)行比較

git diff 哈希值 文件名  #和歷史中的一個(gè)版本比較

git diff [本地庫中歷史版本][文件名]
將工作區(qū)中的文件和本地庫里歷史記錄比較
不帶文件名,比較多個(gè)文件

2.2 分支管理

hot_fix` `master` `feature_x` `feature_y

2.2.1 什么是分支管理

  • 在版本控制中,使用推進(jìn)多個(gè)任務(wù)。

2.2.2 分支的好處

  • 同時(shí)并行推進(jìn)多個(gè)功能開發(fā),提高開發(fā)效率。
  • 各個(gè)分支在開發(fā)過程中,如果某一分支開發(fā)失敗,不會(huì)對(duì)其它分支有任何影響。失敗的分支重新開始即可。

2.2.3 分支操作

  • 創(chuàng)建分支
git branch 分支名
  • 查看分支
git branch
git branch -v  # 查看所有分支
  • 切換分支
git checkout 分支名
git checkout -b 分支名   #創(chuàng)建分支并直接切換到該分支
  • 合并分支相當(dāng)于把修改了的文件拉過來

    第一步:切換到接受修改的分支上(被合并,增加新內(nèi)容) git checkout [被合并的分支名]

    第二步:執(zhí)行 merge 命令 git merge [有新內(nèi)容的分支名]

git merge xxx
注意:合并分支的時(shí)候要明確誰誰合并
    我在a分支里面修改了。要合并到master,就先切換到master,然后合并b
  • 刪除分支
git branch -d 分支名

2.2.4 解決沖突

  • 沖突的表現(xiàn)
  • 沖突的解決
    • 第一步:編輯,刪除特殊標(biāo)記<<< ===
    • 第二步:修改到滿意位置,保存退出
    • 第三步:添加到緩存區(qū) git add [文件名]
    • 第四步:提交到本地庫git commit -m "日志信息" ``注意:后面一定不能帶文件名

二、Git保存版本的機(jī)制

1.1 集中式版本控制工具的文件管理機(jī)制

以文件變更列表的方式存儲(chǔ)信息。這類系統(tǒng)將它們保存的信息看作是一組基本文件和每個(gè)文件隨時(shí)間逐步累積的差異。

1.2 Git的文件管理機(jī)制

Git把數(shù)據(jù)看作是小型文件系統(tǒng)的一組快照。每次提交更新時(shí)Git都會(huì)對(duì)當(dāng)前的全部文件制作一個(gè)快照并保存這個(gè)快照的索引。為了高效,如果文件沒有修改, Git不再重新存儲(chǔ)該文件,而是只保留一個(gè)鏈接指向之前存儲(chǔ)的文件。所以Gt的工作方式可以稱之為快照流

1.3 Git 文件管理機(jī)制細(xì)節(jié)

  • Git的“提交對(duì)象”
  • 提交對(duì)象及其父對(duì)象形成的鏈條

三、Git分支管理機(jī)制

1.1 分支的創(chuàng)建

1.2 分支的切換

四、Git 結(jié)合Github

1.1 創(chuàng)建遠(yuǎn)程庫地址別名

git remote -v  #查看遠(yuǎn)程地址別名
git remote add 別名 遠(yuǎn)程地址 
例子:git remote add origin https://xx

1.2 推送

開發(fā)修改完把本地庫的文件推送到遠(yuǎn)程倉庫
前提是提交到了本地庫才可以推送
git push 別名 分支名
git push -u 別名 分支名    #-u指定默認(rèn)主機(jī)
例子:git push origin master

1.3 克隆

完整的把遠(yuǎn)程庫克隆到本地
克隆下來后不要在主分支里面做開發(fā)
clone進(jìn)行一次,從無到有的過程,更新用pull
git clone [遠(yuǎn)程地址]
例子:git clone https://xx

clone之后的效果:

  1. 完整的把遠(yuǎn)程庫克隆到本地
  2. 創(chuàng)建 origin 遠(yuǎn)程地址別名
  3. 初始化本地庫

1.4 拉取

本地存在 clone 下來的文件 就用 pull 更新
pull = fetch(抓?。?+ merge(合并)
    git fetch [遠(yuǎn)程庫地址別名] [遠(yuǎn)程分支名]
    git merge [遠(yuǎn)程庫地址別名/遠(yuǎn)程分支名]
git pull [遠(yuǎn)程庫地址別名] [遠(yuǎn)程分支名]

1.5 解決沖突

  • 要點(diǎn):如果不是基于GitHub遠(yuǎn)程庫的最新版所做的修改,不能推送,必須先拉取pull。

  • 拉取下來后如果進(jìn)入沖突狀態(tài),則按照 "分支沖突解決" 操作。

  • 注意:解決沖突后的提交是不能帶文件名

1.6 rebase

提交記錄簡(jiǎn)潔不分叉
沒學(xué)懂,感覺有點(diǎn)雞肋
混眼熟
git rebase -i 索引號(hào)
git rebase -i HEAD~3  #合并最近三條記錄
說明:在vim編輯里面改成s

1.7 beyond compare

用軟件解決沖突
1.安裝 :
   beyond compare 
2.配置:
   git config --local merge.tool bc3  #合并名稱
   git config --local mergetool.path '/usr/local/bin/bcomp' #軟件路徑
   git config --local mergetool.keepBackup false  #False不用保存?zhèn)浞?3.應(yīng)用:
   git mergetool
說明:--local指只在當(dāng)前操作系統(tǒng)有效

1.8 跨團(tuán)隊(duì)合作

  1. Fork

  2. 本地克隆clone修改,然后推送到遠(yuǎn)程庫push

  3. Pull Request 請(qǐng)求

  4. Create pull request 發(fā)消息

  5. 兩個(gè)人可以進(jìn)行對(duì)話

  6. 代碼審核review

  7. 合并代碼

  8. 填寫本次操作的日志信息

  9. 將遠(yuǎn)程庫修改拉取到本地(結(jié)束)


  • 適用于個(gè)人

邀請(qǐng)成員:Settings --> Collaborators -->填寫用戶名 -->打開鏈接接受邀請(qǐng)

  • 企業(yè) 創(chuàng)建一個(gè)組織 方便管理

  • review

    組織做review 通過Pull request

  • 給開源社區(qū)共享代碼

    點(diǎn)擊別人倉庫的 fork 到自己的倉庫 -- > 然后 clone 下來 修改后推送到遠(yuǎn)程庫 --> 點(diǎn)擊Pull Request請(qǐng)求 --> Create pull request發(fā)消息

1.9 Tag標(biāo)簽

為了清晰的版本管理,公司一般不會(huì)直接使用 commit 提交
git tag -a v1.0 -m '版本介紹'   #創(chuàng)建本地 tag 信息
git tag -d v1.0         #刪除 tag
git push origin --tags   #將本地 tag 信息推送到遠(yuǎn)程庫
git pull origin --tags    #拉取到本地

git checkout v.10    #切換 tag
git clone -b v0.1 地址   #指定 tag下載代碼

1.10 SSH 免密登錄

  • 輸入:ssh-keygen -t rsa -C GitHub郵箱地址
  • 進(jìn)入.ssh目錄,復(fù)制id_rsa.pub文件內(nèi)容
  • 登錄GitHub。Settings --> SSH and GPG keys--> New SSH Key
  • 回到git通過ssh地址創(chuàng)建。git remote add 別名 SSH地址

五、Git工作流

1.1 概念

  • 在項(xiàng)目開發(fā)過程中使用Git的方式

1.2 分類

1.2.1 集中式工作流
  • 像SVN一樣,集中式工作流有一個(gè)中央倉庫,所有的修改都提交到了Master分支上

  • 這種方式與SVN的只要區(qū)別就是開發(fā)人員有本地庫。Git很多特性并沒有用到。

1.2.2 GitFlow工作流 (重要)
  • 主干分支master 開發(fā)分支develop 修復(fù)分支hotfix 預(yù)發(fā)布分支release 功能分支feature

  • GitFlow 有獨(dú)立的分支,讓發(fā)布迭代過程更流暢。

1.2.3 Forking 工作流
  • 在 GitFlow 基礎(chǔ)上, 充分利用了 Git 的 Fork 和 pull request 的功能以達(dá)到代碼審核的目的。

  • 安全可靠地管理大團(tuán)隊(duì)的開發(fā)者

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容