1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Git 命令全方位學習

        共 7349字,需瀏覽 15分鐘

         ·

        2020-10-16 09:31


        本文公眾號來源:撿田螺的小男孩
        作者:撿田螺的小男孩
        本文已收錄至我的GitHub

        文章目錄

        • Git是什么?
        • Git的相關理論基礎
        • 日常開發(fā)中,Git的基本常用命令
        • Git進階之分支處理
        • Git進階之處理沖突
        • Git進階之撤銷與回退
        • Git進階之標簽tag
        • Git其他一些經(jīng)典命令

        Git是什么

        在回憶Git是什么的話,我們先來復習這幾個概念哈~

        什么是版本控制?

        百度百科定義是醬紫的~

        ?

        版本控制是指對軟件開發(fā)過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。

        那些年,我們的畢業(yè)論文,其實就是版本變更的真實寫照...腦洞一下,版本控制就是這些論文變更的管理~

        什么是集中化的版本控制系統(tǒng)?

        那么,集中化的版本控制系統(tǒng)又是什么呢,說白了,就是有一個集中管理的中央服務器,保存著所有文件的修改歷史版本,而協(xié)同開發(fā)者通過客戶端連接到這臺服務器,從服務器上同步更新或上傳自己的修改。

        什么是分布式版本控制系統(tǒng)?

        分布式版本控制系統(tǒng),就是遠程倉庫同步所有版本信息到本地的每個用戶。嘻嘻,這里分三點闡述吧:

        • 用戶在本地就可以查看所有的歷史版本信息,但是偶爾要從遠程更新一下,因為可能別的用戶有文件修改提交到遠程哦。
        • 用戶即使離線也可以本地提交,push推送到遠程服務器才需要聯(lián)網(wǎng)。
        • 每個用戶都保存了歷史版本,所以只要有一個用戶設備沒問題,就可以恢復數(shù)據(jù)啦~

        什么是Git?

        Git是免費、開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理。

        Git的相關理論基礎

        • Git的四大工作區(qū)域
        • Git的工作流程
        • Git文件的四種狀態(tài)
        • 一張圖解釋Git的工作原理

        Git的四大工作區(qū)域

        先復習Git的幾個工作區(qū)域哈:

        • Workspace:你電腦本地看到的文件和目錄,在Git的版本控制下,構成了工作區(qū)。
        • Index/Stage:暫存區(qū),一般存放在 .git目錄下,即.git/index,它又叫待提交更新區(qū),用于臨時存放你未提交的改動。比如,你執(zhí)行git add,這些改動就添加到這個區(qū)域啦。
        • Repository:本地倉庫,你執(zhí)行git clone 地址,就是把遠程倉庫克隆到本地倉庫。它是一個存放在本地的版本庫,其中HEAD指向最新放入倉庫的版本。當你執(zhí)行git commit,文件改動就到本地倉庫來了~
        • Remote:遠程倉庫,就是類似github,碼云等網(wǎng)站所提供的倉庫,可以理解為遠程數(shù)據(jù)交換的倉庫~

        Git的工作流程

        上一小節(jié)介紹完Git的四大工作區(qū)域,這一小節(jié)呢,介紹Git的工作流程咯,把git的操作命令和幾個工作區(qū)域結合起來,個人覺得更容易理解一些吧,哈哈,看圖:

        git 的正向工作流程一般就這樣:

        • 從遠程倉庫拉取文件代碼回來;
        • 在工作目錄,增刪改查文件;
        • 把改動的文件放入暫存區(qū);
        • 將暫存區(qū)的文件提交本地倉庫;
        • 將本地倉庫的文件推送到遠程倉庫;

        Git文件的四種狀態(tài)

        根據(jù)一個文件是否已加入版本控制,可以把文件狀態(tài)分為:Tracked(已跟蹤)和Untracked(未跟蹤),而tracked(已跟蹤)又包括三種工作狀態(tài):Unmodified,Modified,Staged

        • Untracked: 文件還沒有加入到git庫,還沒參與版本控制,即未跟蹤狀態(tài)。這時候的文件,通過git add 狀態(tài),可以變?yōu)镾taged狀態(tài)
        • Unmodified:文件已經(jīng)加入git庫, 但是呢,還沒修改, 就是說版本庫中的文件快照內(nèi)容與文件夾中還完全一致。Unmodified的文件如果被修改, 就會變?yōu)镸odified. 如果使用git remove移出版本庫, 則成為Untracked文件。
        • Modified:文件被修改了,就進入modified狀態(tài)啦,文件這個狀態(tài)通過stage命令可以進入staged狀態(tài)
        • staged:暫存狀態(tài). 執(zhí)行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodified狀態(tài).

        一張圖解釋Git的工作原理

        日常開發(fā)中,Git的基本常用命令

        • git clone
        • git checkout -b dev
        • git add
        • git commit
        • git log
        • git diff
        • git status
        • git pull/git fetch
        • git push

        這個圖只是模擬一下git基本命令使用的大概流程哈~

        git clone

        當我們要進行開發(fā),第一步就是克隆遠程版本庫到本地呢

        git clone url  克隆遠程版本庫

        git checkout -b dev

        克隆完之后呢,開發(fā)新需求的話,我們需要新建一個開發(fā)分支,比如新建開發(fā)分支dev

        創(chuàng)建分支:

        git checkout -b dev   創(chuàng)建開發(fā)分支dev,并切換到該分支下

        git add

        git add的使用格式:

        git add .	添加當前目錄的所有文件到暫存區(qū)git add [dir]	添加指定目錄到暫存區(qū),包括子目錄git add [file1]	添加指定文件到暫存區(qū)

        有了開發(fā)分支dev之后,我們就可以開始開發(fā)啦,假設我們開發(fā)完HelloWorld.java,可以把它加到暫存區(qū),命令如下

        git add Hello.java  把HelloWorld.java文件添加到暫存區(qū)去

        git commit

        git commit的使用格式:

        git commit -m [message] 提交暫存區(qū)到倉庫區(qū),message為說明信息git commit [file1] -m [message] 提交暫存區(qū)的指定文件到本地倉庫git commit --amend -m [message] 使用一次新的commit,替代上一次提交

        把HelloWorld.java文件加到暫存區(qū)后,我們接著可以提交到本地倉庫啦~

        git commit -m 'helloworld開發(fā)'

        git status

        git status,表示查看工作區(qū)狀態(tài),使用命令格式:

        git status  查看當前工作區(qū)暫存區(qū)變動git status -s  查看當前工作區(qū)暫存區(qū)變動,概要信息git status  --show-stash 查詢工作區(qū)中是否有stash(暫存的文件)

        當你忘記是否已把代碼文件添加到暫存區(qū)或者是否提交到本地倉庫,都可以用git status看看哦~

        git log

        git log,這個命令用得應該比較多,表示查看提交歷史/提交日志~

        git log  查看提交歷史git log --oneline 以精簡模式顯示查看提交歷史git log -p  查看指定文件的提交歷史git blame  一列表方式查看指定文件的提交歷史

        嘻嘻,看看dev分支上的提交歷史吧~要回滾代碼就經(jīng)常用它喵喵提交歷史~

        git diff

        git diff 顯示暫存區(qū)和工作區(qū)的差異git diff filepath   filepath路徑文件中,工作區(qū)與暫存區(qū)的比較差異git diff HEAD filepath 工作區(qū)與HEAD ( 當前工作分支)的比較差異git diff branchName filepath 當前分支的文件與branchName分支的文件的比較差異git diff commitId filepath 與某一次提交的比較差異

        如果你想對比一下你改了哪些內(nèi)容,可以用git diff對比一下文件修改差異哦

        git pull/git fetch

        git pull  拉取遠程倉庫所有分支更新并合并到本地分支。git?pull?origin?master?將遠程master分支合并到當前本地分支git pull origin master:master 將遠程master分支合并到當前本地master分支,冒號后面表示本地分支
        git fetch --all 拉取所有遠端的最新代碼git fetch origin master 拉取遠程最新master分支代碼

        我們一般都會用git pull拉取最新代碼看看的,解決一下沖突,再推送代碼到遠程倉庫的。

        有些伙伴可能對使用git pull還是git fetch有點疑惑,其實 git pull = git fetch+ git merge。pull的話,拉取遠程分支并與本地分支合并,fetch只是拉遠程分支,怎么合并,可以自己再做選擇。


        git push

        git push 可以推送本地分支、標簽到遠程倉庫,也可以刪除遠程分支哦。

        git push origin master 將本地分支的更新全部推送到遠程倉庫master分支。git push origin -d    刪除遠程branchname分支git push --tags 推送所有標簽

        如果我們在dev開發(fā)完,或者就想把文件推送到遠程倉庫,給別的伙伴看看,就可以使用git push origin dev~

        Git進階之分支處理

        Git一般都是存在多個分支的,開發(fā)分支,回歸測試分支以及主干分支等,所以Git分支處理的命令也需要很熟悉的呀~

        • git branch
        • git checkout
        • git merge

        git branch

        git branch用處多多呢,比如新建分支、查看分支、刪除分支等等

        新建分支:

        git checkout -b dev2  新建一個分支,并且切換到新的分支dev2git branch dev2 新建一個分支,但是仍停留在原來分支

        查看分支:

        git branch    查看本地所有的分支git branch -r  查看所有遠程的分支git branch -a  查看所有遠程分支和本地分支

        刪除分支:

        git branch -D   刪除本地branchname分支

        git checkout

        切換分支:

        git checkout master 切換到master分支

        git merge

        我們在開發(fā)分支dev開發(fā)、測試完成在發(fā)布之前,我們一般需要把開發(fā)分支dev代碼合并到master,所以git merge也是程序員必備的一個命令。

        git merge master  在當前分支上合并master分支過來git merge --no-ff origin/dev  在當前分支上合并遠程分支devgit merge --abort 終止本次merge,并回到merge前的狀態(tài)

        比如,你開發(fā)完需求后,發(fā)版需要把代碼合到主干master分支,如下:

        Git進階之處理沖突

        Git版本控制,是多個人一起搞的,多個分支并存的,這就難免會有沖突出現(xiàn)~

        Git合并分支,沖突出現(xiàn)

        同一個文件,在合并分支的時候,如果同一行被多個分支或者不同人都修改了,合并的時候就會出現(xiàn)沖突。

        舉個粟子吧,我們現(xiàn)在在dev分支,修改HelloWorld.java文件,假設修改了第三行,并且commit提交到本地倉庫,修改內(nèi)容如下:

        public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello,撿田螺的小男孩!");    }}

        我們切回到master分支,也修改HelloWorld.java同一位置內(nèi)容,如下:

        public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello,jay??!");    }}

        再然后呢,我們提交一下master分支的這個改動,并把dev分支合并過下,就出現(xiàn)沖突啦,如圖所示:

        Git解決沖突

        Git 解決沖突步驟如下:

        • 查看沖突文件內(nèi)容
        • 確定沖突內(nèi)容保留哪些部分,修改文件
        • 重新提交,done

        1.查看沖突文件內(nèi)容

        git merge提示沖突后,我們切換到對應文件,看看沖突內(nèi)容哈,,如下:

        2.確定沖突內(nèi)容保留哪些部分,修改文件

        • Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內(nèi)容,
        • <<<<<<>>>>>> dev是指dev分支上修改的內(nèi)容

        所以呢,我們確定到底保留哪個分支內(nèi)容,還是兩個分支內(nèi)容都保留呢,然后再去修改文件沖突內(nèi)容~

        3.修改完沖突文件內(nèi)容,我們重新提交,沖突done

        Git進階之撤銷與回退

        Git的撤銷與回退,在日常工作中使用的比較頻繁。比如我們想將某個修改后的文件撤銷到上一個版本,或者想撤銷某次多余的提交,都要用到git的撤銷和回退操作。

        代碼在Git的每個工作區(qū)域都是用哪些命令撤銷或者回退的呢,如下圖所示:

        有關于Git的撤銷與回退,一般就以下幾個核心命令

        • git checkout
        • git reset
        • git revert

        git checkout

        如果文件還在工作區(qū),還沒添加到暫存區(qū),可以使用git checkout撤銷

        git checkout [file]  丟棄某個文件filegit checkout .  丟棄所有文件

        以下demo,使用git checkout -- test.txt 撤銷了test.txt的修改

        git reset

        git reset的理解

        git reset的作用是修改HEAD的位置,即將HEAD指向的位置改變?yōu)橹按嬖诘哪硞€版本.


        為了更好地理解git reset,我們來回顧一下,Git的版本管理及HEAD的理解

        Git的所有提交,會連成一條時間軸線,這就是分支。如果當前分支是master,HEAD指針一般指向當前分支,如下:


        假設執(zhí)行git reset,回退到版本二之后,版本三不見了哦,如下:

        git reset的使用

        Git Reset的幾種使用模式

        git reset HEAD --file回退暫存區(qū)里的某個文件,回退到當前版本工作區(qū)狀態(tài)git reset –-soft 目標版本號 可以把版本庫上的提交回退到暫存區(qū),修改記錄保留git reset –-mixed 目標版本號 可以把版本庫上的提交回退到工作區(qū),修改記錄保留git reset –-hard  可以把版本庫上的提交徹底回退,修改的記錄全部revert。

        先看一個粟子demo吧,代碼git add到暫存區(qū),并未commit提交,可以醬紫回退,如下:

        git reset HEAD file 取消暫存git checkout file 撤銷修改

        再看另外一個粟子吧,代碼已經(jīng)git commit了,但是還沒有push:

        git log  獲取到想要回退的commit_idgit reset --hard commit_id  想回到過去,回到過去的commit_id

        如果代碼已經(jīng)push到遠程倉庫了呢,也可以使用reset回滾哦(這里大家可以自己操作實踐一下哦)~

        git loggit reset --hard commit_idgit push origin HEAD --force

        git revert

        與git reset不同的是,revert復制了那個想要回退到的歷史版本,將它加在當前分支的最前端。

        revert之前:revert 之后:

        當然,如果代碼已經(jīng)推送到遠程的話,還可以考慮revert回滾呢

        git log  得到你需要回退一次提交的commit idgit revert -n   撤銷指定的版本,撤銷也會作為一次提交進行保存

        Git進階之標簽tag

        打tag就是對發(fā)布的版本標注一個版本號,如果版本發(fā)布有問題,就把該版本拉取出來,修復bug,再合回去。

        git tag  列出所有taggit tag [tag] 新建一個tag在當前commitgit tag [tag] [commit] 新建一個tag在指定commitgit tag -d [tag] 刪除本地taggit push origin [tag] 推送tag到遠程git show [tag] 查看taggit checkout -b [branch] [tag] 新建一個分支,指向某個tag

        Git其他一些經(jīng)典命令

        git rebase

        rebase又稱為衍合,是合并的另外一種選擇。

        假設有兩個分支master和test

              D---E test      / A---B---C---F--- master

        執(zhí)行 git merge test得到的結果

               D--------E      /          \ A---B---C---F----G---   test, master

        執(zhí)行git rebase test,得到的結果

        A---B---D---E---C‘---F‘---   test, master

        rebase好處是: 獲得更優(yōu)雅的提交樹,可以線性的看到每一次提交,并且沒有增加提交節(jié)點。所以很多時候,看到有些伙伴都是這個命令拉代碼:git pull --rebase,就是因為想更優(yōu)雅,哈哈

        git stash

        stash命令可用于臨時保存和恢復修改

        git stash  把當前的工作隱藏起來 等以后恢復現(xiàn)場后繼續(xù)工作git stash list 顯示保存的工作進度列表git stash pop stash@{num} 恢復工作進度到工作區(qū)git stash show :顯示做了哪些改動git stash drop stash@{num} :刪除一條保存的工作進度git stash clear 刪除所有緩存的stash。

        git reflog

        顯示當前分支的最近幾次提交

        git blame filepath

        git blame 記錄了某個文件的更改歷史和更改人,可以查看背鍋人,哈哈

        git remote

        git remote   查看關聯(lián)的遠程倉庫的名稱git remote add url   添加一個遠程倉庫git remote show [remote] 顯示某個遠程倉庫的信息



        原創(chuàng)電子書

        原創(chuàng)思維導圖

        掃碼或微信搜 Java3y?回復「888」領取1000+原創(chuàng)電子書和思維導圖。

        瀏覽 56
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            宝贝好快高潮真紧好爽我 | 亚洲精品一区二区三区2023年最新 | 91天堂在线 | 色呦呦一区二区 | 做爱网站在线看播放 | 91精品久久人人妻人人爽人人 | 欧美成人精品无码 | 日本天堂网中文字幕 | 无码精品少妇一区二区三区久久 | 国模张雪磬 |