Git詳解以及使用遇到問題解決

一. Git整體理解

Git代碼管理是分布式管理方式系統(tǒng).優(yōu)點(diǎn)在于其極高的安全性和非常強(qiáng)大的分支管理.
整體流程圖.png
  • 工作區(qū)(working directory): 就是本地的代碼區(qū),電腦能看到的目錄,就是工作區(qū).
  • 暫存區(qū)(Index):工作區(qū)下有一個隱藏的'.git'文件,其主要作用是存儲Git自動創(chuàng)建的第一個master分支,還有指向master分支的HEAD指針.還有一個最重要的stage的暫存區(qū).需要提交的文件修改通通放到暫存區(qū),然后一次性提交到暫存區(qū)的所有修改.
  • 本地倉: 本地的個人倉庫.管理著個人的代碼的版本信息.
  • 遠(yuǎn)程倉: 線上的倉庫.管理著推送到服務(wù)器的代碼版本.

過程1: 由工作區(qū)<->暫存區(qū)

  • 工作區(qū)->暫存區(qū):
    git add . 添加所有的修改或者git add <文件名>添加單個指定的文件修改到暫存區(qū)中.
  • 暫存區(qū)->工作區(qū):
    (1)git rm --cached "文件路徑" 不刪除物理文件,緊將git的緩存刪除.
    (2)git rm --f "文件路徑" 不僅將該文件從緩存中 刪除,還將物理文件刪除(不會放到垃圾桶).
    例如: git rm -rf .DS_Store
    (3)git reset <版本號> 利用版本庫清空暫存區(qū).原理:將當(dāng)前分支重設(shè)(reset)到指定的<commit>或者HEAD(默認(rèn),如果不指定commit,默認(rèn)是HEAD,即最新的一次提交)
    --hard
    git reset --hard <commit號>重設(shè)(reset)index和working directory,自從<commit>以來在working directory中的任何改變都被丟棄,并把HEAD指向<commit>
    --soft
    git reset --soft <commit號>index和working directory中的內(nèi)容不作任何改變,僅僅把HEAD指向<commit>。這個模式的效果是,執(zhí)行完畢后,自從<commit>以來的所有改變都會顯示在git status的"Changes to be committed"中

過程2:由暫存區(qū)<->本地倉庫

  • 暫存區(qū)->本地倉庫
    git commit -m '本次commit的描述'

  • 本地倉庫->暫存區(qū)
    (1) git reset <版本號> 利用版本庫清空暫存區(qū).原理:將當(dāng)前分支重設(shè)(reset)到指定的<commit>或者HEAD(默認(rèn),如果不指定commit,默認(rèn)是HEAD,即最新的一次提交)
    (2) --hard
    git reset --hard <commit號>重設(shè)(reset)index和working directory,自從<commit>以來在working directory中的任何改變都被丟棄,并把HEAD指向<commit>
    (3) --soft
    git reset --soft <commit號>index和working directory中的內(nèi)容不作任何改變,僅僅把HEAD指向<commit>。這個模式的效果是,執(zhí)行完畢后,自從<commit>以來的所有改變都會顯示在git status的"Changes to be committed"中.退回到該次commit提交,但是該版本之后所有的修改都沒有了,如果想要恢復(fù),就要試圖從還未關(guān)閉的終端中找到你想要的退回的版本號,或者用git reflog查找你想要的commit版本號.繼續(xù)用git reset --soft <commit號>回退

過程3: 由本地倉->遠(yuǎn)程倉庫

git push

說明: 三種git add的區(qū)別

  • git add .提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件
  • git add -u提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)
  • git add -A: 提交所有變化

二. 在本地創(chuàng)建一個Git管理的項(xiàng)目

  • 從線上拉項(xiàng)目到本地
    git clone "項(xiàng)目的地址路徑"克隆一個git管理的項(xiàng)目到本地
  • 本地項(xiàng)目上傳線上
    git init
    git remote add origin "地址url"

三. Git上的常用查看操作

1.查看文本內(nèi)容
cat <文件名>
2.查看git的狀態(tài)
git status會告訴你在當(dāng)前的分支上git的情況(有沒有修改,修改的文件是什么等)

  learngit git:(master) git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean 

3.查看更詳細(xì)的文件修改
git diff 查看所有文件的不同
git diff <文件名> 查看指定文件的不同
diff 是difference的縮寫.只能查看還未add(還沒加入到暫存區(qū))的修改
4.查看所有的commit信息
git log
git log --pretty=oneline 更簡潔的查看log信息(只有commit號和描述信息)
5.查看所有的git操作過的命令,可以找到刪除了的commit號
git reflog
6.查看分支合并圖
git log --graph

四. 沖突處理

<<<<<<<HEAD
1 + 1 = 2                         這個區(qū)間內(nèi)的內(nèi)容是當(dāng)前開發(fā)者修改的
=======
1 + 2 = 3                        這個區(qū)間內(nèi)的內(nèi)容是其他開發(fā)者修改的
>>>>>>>
需要人工判斷具體是刪除或者保留哪一個修改內(nèi)容.并且把1,2,3行提示刪除掉.

五. Git分支操作

  1. 分支基本操作
  • 分支的創(chuàng)建和切換
    git branch "分支名" 創(chuàng)建一個分支 git checkout "分支名" 切換到該分支
    創(chuàng)建并切換到該分支 git checkout -b "分支名"

  • 列出所有的分支
    git branch 列出本地分支 用*標(biāo)記當(dāng)前的分支
    git branch -a 列出遠(yuǎn)程分支

  • 合并分支
    git merge "分支名"合并指定分支到當(dāng)前分支
    git rebase "分支名"合并指定分支到當(dāng)前分支
    兩者的區(qū)別在于會不會保留分支操作的記錄,前者記錄,后者不記錄.建議用merge

  • 刪除分支
    刪除本地分支: git branch -d "分支名"
    強(qiáng)制刪除本地分支: git branch -D "分支名"
    刪除遠(yuǎn)程分支: git push origin :<分支名> (危險(xiǎn)命令哦)
    如果提示the branch XXX is not fully merged(XXX分支有沒有合并到當(dāng)前分支的內(nèi)容)

  • 本地新建了一個分支要推送到線上,需要設(shè)置關(guān)聯(lián)或者追蹤.
    第一次push: git push origin 本地分支名:遠(yuǎn)程分支名

  • 遠(yuǎn)程端生成了一個新的分支,拉取到本地.
    git checkout -b 本地分支要起的名字 origin/遠(yuǎn)程分支名

六. bug分支

用issue作為分支的開頭標(biāo)記,當(dāng)有一個bug出現(xiàn)需要改的時候,先拉取一個issue分支,修改并合并到開發(fā)分支上,然后刪除issue分支.

七. feature分支

  • 開發(fā)新的功能的時候,最好拉去一個新的分支,以feature開頭.
  • 丟掉一個沒有合并過的分支,即刪除分支.(當(dāng)新功能正在或者已經(jīng)開發(fā)完,領(lǐng)導(dǎo)突然說不要了...心累)
    git branch -D <分支名> 強(qiáng)制刪除該分支內(nèi)容

八. 暫存的使用

  1. git stash 暫存
  2. git stash list 查看所有的暫存
  3. git stash apply 從暫存開始執(zhí)行,但是stash內(nèi)容不會刪除.
  4. git stash drop 刪除暫存
  5. git stash pop 恢復(fù)暫存的同時刪除暫存
  6. git stash apply stash@{0}恢復(fù)指定的暫存

九. 遠(yuǎn)程倉的操作

  • 查看遠(yuǎn)程倉的信息
    git remote
    git remote -v 顯示更詳細(xì)的信息
  • 將分支推送到遠(yuǎn)程倉
    git push origin 本地分支名:遠(yuǎn)程分支名

十. 標(biāo)簽的使用

標(biāo)簽只能在master分支上使用. 盡量寫清楚所有的修改,為了萬一的版本回退做好描述工作.
1.git tag <name>新建一個標(biāo)簽
2.git tag -a <name> -m "指定的標(biāo)簽信息"
3.git show <tag名字> 查看詳細(xì)的tag信息
4.git tag 查看所有的tag名字
5.git tag -d <標(biāo)簽名字>刪除一個標(biāo)簽
6.git push origin <標(biāo)簽名>推送標(biāo)簽到遠(yuǎn)程
7.git push origin --tags一次性推送所有未推送的標(biāo)簽
8.刪除遠(yuǎn)程倉上的tag

  • 先刪除本地的標(biāo)簽: git tag -d <tag名字>
  • 然后刪除遠(yuǎn)程端的標(biāo)簽: git push origin :tag名字

十一 .gitignore的使用

iOS 用到的.gitignore https://github.com/github/gitignore/blob/master/Objective-C.gitignore

  • 在工作區(qū)創(chuàng)建一個名字為.gitignore文件.把要忽略的文件名字填進(jìn)去,并提交到Git.Git會自動忽略這些文件的修改.把鏈接中的內(nèi)容信息copy到.gitignore文件中.

  • 記住一定要把.gitignore拉取到具體的分支上才有用.

  • git check-ignore 檢查ignore內(nèi)容

  • git add -f <文件名>即使在gitignore中文件,也可以提交.

  • UserInterfaceState.xcuserstate,Breakpoints_v2.xcbkptlist 文件的忽略
    在. gitignore文件中加入
    工程名.xcodeproj/project.xcworkspace/xcuserdata/電腦名.xcuserdatad/UserInterfaceState.xcuserstate
    工程名.xcodeproj/xcuserdata/電腦名.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

如果配置完之后還沒有忽略,那么就要清空緩存.
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

十二 Git 配置全局信息

1.配置作者名稱
git config --global user.name "Your Name"
2.配置個人郵箱
git config --global user.email "email@example.com"
3.配置git的顏色(文件名會標(biāo)記上顏色)
git config --global color.ui true

十三. Git上需要注意的單詞

  • repository 倉庫
  • software 軟件
  • mode 模式,風(fēng)格
  • insertion 插入
  • commit 把...托給
  • stage 原意:舞臺,Git中是暫存區(qū)的意思.
  • checkout 檢出
  • branch 分支
  • modified 改進(jìn)的,修改的
  • unstaged 還未加入到暫存區(qū)的 un + stage(暫存區(qū))
  • untracked 無足跡的,還沒有加入git管理的
  • origin 起源,起點(diǎn)
  • reset 重設(shè)
  • rebase
  • merge 合并
  • remote 遙遠(yuǎn)的,遠(yuǎn)程的
  • HEAD 表示當(dāng)前版本
  • HEAD^ 上一個版本
  • HEAD^^ 上兩個版本
  • HEAD~100 上100個版本

十四. Linux的一些簡單操作和一些符號的解釋

命令操作

  1. 目錄/文件的操作
  • mkdir "目錄名" 在當(dāng)前路徑下創(chuàng)建一個文件夾
  • mvdir "目錄1" "目錄2" 移動或者重命名一個目錄 (如果目錄2不存在,就直接修改目錄1的名稱為目錄2)
  • rmdir "目錄名" 刪除一個目錄
  • touch 創(chuàng)建一個文件
  • vim "文件名 編輯文件,如果文件不存在,就創(chuàng)建并進(jìn)入編輯.
  • 刪除一個文件
    sudo rm -rf <文件名> 在上帝權(quán)限下刪除,可以刪除一個該用戶沒有權(quán)限的文件(包括系統(tǒng)文件),不建議使用
    rm <文件名>能刪除當(dāng)前用戶權(quán)限下的文件
  1. 轉(zhuǎn)換目錄
  • cd + "路徑" 進(jìn)入該文件目錄下(也可以將文件直接拖進(jìn)來)
  • cd .. 回到上級目錄
  • cd . 當(dāng)前目錄 cd / 回到根目錄
  • cd test.rtf 不可用. 不能cd到文件里.只能cd到目錄.
    報(bào)錯信息: -bash: cd: test.rtf: Not a directory
  1. 拷貝/移動/刪除
    cp "需要拷貝的文件路徑" "目標(biāo)地址路徑"
    拷貝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夾2
    mv "需要移動的文件路徑" "目標(biāo)地址路徑"
    移動文件 例如: mv 文件夾2 /Users/goulela/Desktop/創(chuàng)建文件夾/文件夾
  2. 顯示操作
  • file "文件名" 顯示文件的類型

  • wc "文件名" 統(tǒng)計(jì)文件的字符數(shù),詞數(shù),行數(shù)

  • pwd 查看當(dāng)前所在的目錄

  • ls 顯示當(dāng)前路徑下有什么文件

  • ls + "目錄名" 顯示特定的路徑下有什么文件

  • ls -w 顯示中文

  • ls -l 詳細(xì)信息

  • ls -a 顯示所有文件,包括隱藏文件

  1. 時間操作
  • date 顯示系統(tǒng)的當(dāng)前日期和時間
  • cal 顯示日歷
  1. 網(wǎng)絡(luò)與通信
  • ping "url" 給一個遠(yuǎn)程主機(jī)發(fā)送 回應(yīng)請求
  • 終止ping打印 control + c
  • who 列出當(dāng)前登錄的所有用戶
  • whoami 顯示當(dāng)前正進(jìn)行操作的用戶名

十五. 符號解釋

  1. -r 就是向下遞歸,不管有多少級目錄,一并刪除
  2. -f 就是直接強(qiáng)行刪除,不作任何提示的意思
  3. -rf 向下遞歸強(qiáng)制刪除
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Git整體理解 Git代碼管理是分布式管理方式系統(tǒng),優(yōu)點(diǎn)在于其極高的安全性和非常強(qiáng)大的分支管理。 工作區(qū)(wo...
    彭磊PL閱讀 1,072評論 0 1
  • Add & Commit git init 初始化一個 Git 倉庫(repository),即把當(dāng)前所在目錄變成...
    冬絮閱讀 5,125評論 0 9
  • 查看、添加、提交、刪除、找回,重置修改文件 git help # 顯示command的help git sho...
    Swiftor閱讀 2,210評論 0 2
  • Git是分布式版本控制系統(tǒng),那么它就沒有中央服務(wù)器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不 需要...
    謝謝是我閱讀 552評論 0 1
  • 以下筆記主要參考gitgot,大致了解git使用和原理。 第一部分我們從個人的視角去研究如何用好Git,并且揭示G...
    carolwhite閱讀 2,521評論 0 1

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