<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • git客戶端使用安裝教程(提交代碼的正確步驟)


    分支管理

    Git中比較最重要的一點就是分支的概念,有了分支就有了合并和衍合的操作,「合并」「衍合」能夠「有效的對代碼版本的管理」。

    Git的初始化中有一條默認的主分支叫做master,每一次的提交都會串成一條時間線,這就是一條分支,當前分支由HEAD指針指向:

    深入淺出圖解Git,入門到精通(保姆級教程)

    當每次發生代碼提交的時候,當前指向就會向前形成一個新的版本,假如再創建一個新的分支bran,并且當前的提交指向新的分支,這樣新的分支隨著時間的推移就會形成許多版本:

    深入淺出圖解Git,入門到精通(保姆級教程)

    當新分支開發完后,提交倉庫,并合并到主干master,最后刪除bran分支,這樣就完成了一次個人的開發:

    深入淺出圖解Git,入門到精通(保姆級教程)

    所以,假如主分支上只建立一條分支的話,分支的合并是非??焖俚?,只需要移動master分支到當前提交,然后將HEAD指針指向master,最后刪除bran分支就完成了。

    但是,事實上并不是這樣的,在一個多人協作的開發團隊中,往往每個人都會建立自己的分支,有自己的提交,最后合并到主干,當自己提交的時候,遠程倉庫代碼就會存在自己本地倉庫并未有的代碼,這樣就會導致push失敗。

    例如:程序員Tom和Jerry同時遷出代碼,他們的初始代碼分支都如下圖所示:

    深入淺出圖解Git,入門到精通(保姆級教程)

    當Tom開發自己的業務模塊,提交代碼并且合并到主干后,遠程主干分支如下圖所示:

    深入淺出圖解Git,入門到精通(保姆級教程)

    「遠程倉庫master已經不再指向gs234,而是新生成了一個版本dfd453,作為當前指向的版本」。

    與此同時,Jerry的本地也同時開發完自己的模塊后,分支如下圖所示:

    深入淺出圖解Git,入門到精通(保姆級教程)

    在Jerry的本地環境中,他的「本地倉庫master還是指向gs234」,Jerry在自己新建立的一個分支bran中進行開發,開發完后合并分支,最后master就會指向ed489。

    當Jerry再次提交代碼,Git就會檢查遠程倉庫與Jerry的本地倉庫,進行對比后,發現遠程倉庫存在Jerry的本地倉庫不存在的代碼,就需要Jerry將遠程倉庫執行git pull后,自行解決沖突。

    上面說了分支基本原理,已經管理分支出現的問題,下面我們就來一步一步的深入操作分支的基本命令。

    新建分支

    Git新建一個分支的命令為:git branch <分支名字>,新建立后分之后,切換分支的命令為:git checkout <分支名字>。

    新建分支的實質:「就是新建立一個引用,指向當前提交,master就好比一個引用」;切換分支的實質:就是將HEAD由指向原來的引用,重新指向要切換的分支的引用上:

    深入淺出圖解Git,入門到精通(保姆級教程)

    當然上面創建分支并且合并分支的兩條命令可以合并成一條命令:git checkout -b <分支名字>

    當切換分之后,每次commit提交代碼時HEAD指針就會跟隨著新的bran分支移動,形成bran分支上的每一個版本:

    深入淺出圖解Git,入門到精通(保姆級教程)

    假如,在新的bran分支上開發到某一個版本,再次切換回master分支進行開發就會形成分叉:

    深入淺出圖解Git,入門到精通(保姆級教程)

    查看分支

    當分支創建好了,你可以通過:git branch,來查看自己本地的分支情況:

    深入淺出圖解Git,入門到精通(保姆級教程)

    分支前面帶有*號的表示當前的分支,查看分之后,你就可以很清楚的知道自己要checkout哪條分支了。

    合并分支

    開發完自己模塊后,后面就會在自己本地進行合并分支,合并分支的命令:git merge <分支名字>,它表示「合并指定的分支到當前分支」,比如:當前分支為master,執行:git merge bran,表示合并bran分支到當前master分支上。

    分支合并也會有失敗的情況,當你的兩條分支都修改的相同的文件,這時候Git就無法判斷你要保留哪一個修改,就會出現merge沖突。

    例如:我先在master分支修改README.md文件,然后提交本地倉庫:

    深入淺出圖解Git,入門到精通(保姆級教程)

    然后切換回分支dev,再次修改README.md文件,再次提交

    深入淺出圖解Git,入門到精通(保姆級教程)

    最后進行合并分支,此時在你兩次修改的README.md文件中就會出現兩次修改的沖突代碼:

    深入淺出圖解Git,入門到精通(保姆級教程)

    因為你兩次修改同一文件的操作,合并后Git并不知道你要保留哪一次的操作,所以它就會將這個決定交給你自己決定,它只告訴你文件中哪里的代碼沖突了,具體怎么改就由你自己去弄。

    深入淺出圖解Git,入門到精通(保姆級教程)

    刪除分支

    最后是刪除自己新建的分支,通過:git branch -d <分支名字>,進行刪除分支,假如分支刪除不了,可以通過:git branch -D <分支名字>,強制刪除分支:

    深入淺出圖解Git,入門到精通(保姆級教程)

    Git中刪除分支的實質:dev只是一個分支的引用,所以刪除分支也就是刪除這個引用,并不會刪除任何conmit,所以刪除操作也是非常高效的。

    假如一條分支commit的引用被刪除,那么這條分支的就沒有任何引用指向,這樣就會找不到這條分支,最后就會被Git回收機制回收。

    查看遠程

    在多人協作的團隊下,你可能要隨時查看遠程倉庫的情況,可以通過:git remote,進行查看,加上-v參數可以查看遠程倉庫的詳細情況。

    git remote
    git remote -v
    

    推送分支

    深入淺出圖解Git,入門到精通(保姆級教程)

    分支的推送到遠程上一節已經提過,使用git push命令就可以進行分支的推送,命令后面加上分支的命令,表示具體推送哪條分支:

    git push origin master // 將本地master分支推送到遠程庫
    

    拉取分支

    分支的拉取使用git pull命令,這條命令相當于以下兩條命令:

    git fetch
    git merge
    

    但是一般實際工作中,都可能會直接使用git pull命令:

    深入淺出圖解Git,入門到精通(保姆級教程)

    分支管理策略

    在合并分支的時候,Git會以快速合并的模式進行合并(Fast forward),但是這種模式刪除分支后,會丟失分支的信息。

    Git中還可以以「普通模式」進行合并,在原來git merge命令后面加上–no-ff參數即可,合并的命令如下:

    $ git merge --no-ff -m "message" dev
    

    臨時存取工作區的改動

    在開發中,若是某一時刻你想把當前的改動臨時進行存放起來,可以使用git stash命令,它表示將改動的文件存儲到一個獨立的存儲區域,并不會被提交,當再次需要的時候可以隨時取出來。

    這里要注意的是:「git stash的是改動的文件,也就是被Git追蹤的文件,新添加的文件并沒有被Git追蹤,所以git stash并不會stash」

    深入淺出圖解Git,入門到精通(保姆級教程)

    git stash命令也可以加上save命令后面再加上備注信息,方便查看:

    git stash save "備注信息"
    

    git stash成功后「本地的工作目錄的代碼會和本地倉庫一樣」,git stash后可以通過git stash list命令查看之前stash的歷史記錄,當再次需要將改動的文件取出來時候,可以通過以下命令:

    git stash pop
    

    git stash pop表示「彈出第一個被stash的記錄,并且該stash會從歷史記錄中刪除」;也可以使用git stash apply命令「彈出stash,但是這條命令stash仍然會保存在stash歷史記錄中」,你也可以通過:git stash drop命令來刪除。

    深入淺出圖解Git,入門到精通(保姆級教程)

    這一篇就只講解了Git的分支原理以及Git的臨時存取操作,限于篇幅,我們今天就到這里,

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费