<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          傻瓜式Git提交代碼流程【寫給初學(xué)者】

          共 5253字,需瀏覽 11分鐘

           ·

          2021-05-28 13:23



          前言

          Git是程序員工作中最最常用的分布式版本控制系統(tǒng),為的就是解決那種多人協(xié)作、多次修改的問題,雖說Git可以應(yīng)用于各行各業(yè),但是實際上還是程序員用的最多了,應(yīng)該說是程序員的必備技能之一了,如果你還不會Git,趕緊學(xué)起來吧,否則可能要out了

          可能很多學(xué)生黨只是平時使用過Git,自己練習(xí)過Git命令,但是并未真實在工作中使用過Git,也就是可能沒有遇到過各種需要回滾代碼、解決沖突這種場景

          我這篇文章默認(rèn)大家對Git是有一定了解的,也就是關(guān)于上面這些理論啥的大概應(yīng)該是懂得,我也就不多啰嗦了,個人操作的是工作區(qū),add之后會提交到一個暫存區(qū)stage,commit之后會提交到本地倉庫,push是提交到遠(yuǎn)程倉庫

          這篇文章大致介紹了下面這些【提交代碼幾種方式】【撤銷add操作】【撤銷commit操作】【撤銷push操作】【拉取新分支】【解決沖突】,主要是以命令行為主,命令行能幫助大家更容易理解,這樣以后操作起可視化工具會更加便捷,比如sourceTree



          最順利提交

          先說一個需求開發(fā)、代碼提交的順利的流程

          命令行式

          切換基礎(chǔ)分支:先切換到要基于拉取的分支,我們開發(fā)中一般可能會基于master拉取的比較多,那就先切換到master(git checkout master)

          創(chuàng)建本地分支:git checkout -b new-branch

          提交到遠(yuǎn)程:git push origin new-branch

          設(shè)置關(guān)聯(lián):git pull一下拉取遠(yuǎn)程分支代碼會發(fā)現(xiàn)并未關(guān)聯(lián),OK lets do it

          git branch --set-upstream-to=origin/new-branch new-branch 來建立關(guān)聯(lián),第一個new-branch是遠(yuǎn)程分支名稱,第二個是本地名稱

          再次git pull一下,成功

          接下來進行水深火熱的開發(fā),假設(shè)假設(shè)你的開發(fā)過程一切順利,也沒有出現(xiàn)和同事提交代碼之間的沖突,你可能會有疑問,為什么我單獨創(chuàng)建的分支會出現(xiàn)沖突,出現(xiàn)了沖突又該如何解決呢,當(dāng)然沖突問題下面我會說

          OK,下班了,先交下代碼

          你以為我開發(fā)完成了?怎么可能,一天怎么可能開發(fā)完成,你這個需求這里這樣設(shè)計開發(fā)起來不簡單,那里這樣設(shè)計開發(fā)起來也比較麻煩

          總之,一天不可能開發(fā)完成(壞笑

          但是我想先交一下代碼,我怕下班之后別人把我電腦給我偷了,偷了我的勞動成果

          把代碼放到本地倉庫和把大象放到冰箱需要三步相比,也需要三步可完成

          第一步:git add命令來把修改的文件放到暫存區(qū)  

          git add file  或者  git add .代表所有

          第二步:git commit 命令來把文件提交到倉庫

          git commit -m '提交信息'  加-m參數(shù)后面跟提示信息,強烈建議

          這樣就可以把代碼提交到本地倉庫了,這樣別人把我電腦偷了,我的代碼就不會丟了嗎

          還沒有,現(xiàn)在只是暫時提交到本地倉庫了,還沒提交到遠(yuǎn)程,電腦丟了代碼還是會丟

          接下來我們來做最后一步:

          git pull  拉取遠(yuǎn)程代碼,這一步的作用是為了防止代碼沖突,如果這個分支只是你個人在操作,這一步可以省略,因為不會有沖突

          但是如果多個人在操作同一分支,大家交的代碼就可能產(chǎn)生沖突

          沖突,顧名思義,就是大家修改的矛盾了,Git服務(wù)器無法判斷到底哪一版本代碼應(yīng)該保留,需要人工介入

          沖突問題可能對于一些初學(xué)者來說比較頭疼,文章下面單獨拎出來說

          git push origin new-branch 把本地倉庫代碼提交到遠(yuǎn)程

          OK,收工!

          sourceTree式

          檢出新分支


          按照下面方式操作,直接提交即可,很簡單,傻瓜式操作

          其實還是可視化工具好用,不過這個還是看個人習(xí)慣


          問題多多的提交

          當(dāng)然,這是一切一切都很順利的情況,但是實際開發(fā)中,總有一些不盡人意的情況

          再一步步分析其中每一步驟出現(xiàn)問題,如何解決

          撤銷本地的修改操作

          git status查看當(dāng)前文件狀態(tài)

          git checkout -- xxx.java  撤銷單個文件的本地修改,當(dāng)然這里如果已經(jīng)add到暫存區(qū)了,這個命令是無效的,需要先通過下面的git reset HEAD xxx.java進行add操作的撤銷,之后才能對撤銷文件進行修改

          git執(zhí)行了git checkout -- xxx.java之后再次執(zhí)行g(shù)it status發(fā)現(xiàn)本地沒有已經(jīng)修改的文件了,也就是本地修改已經(jīng)被撤銷了

          git checkout branch-name 這個命令可以用來切換本地分支,記得區(qū)分

          撤銷add到暫存區(qū)的操作(綠字變紅字)

          git status查看當(dāng)前文件狀態(tài)

          git add操作之后添加到本地暫存區(qū),變?yōu)榫G字

          撤銷綠字:撤銷add操作到暫存區(qū)

          git reset HEAD xxx.java 這是對某個文件進行add的撤銷,如果后面什么文件都不跟,其實就是對剛剛add的所有文件進行撤銷了git reset HEAD

          我們執(zhí)行了之后,發(fā)現(xiàn)原本變綠(已經(jīng)add的文件)的文件,又變回紅色的文件了,這時候就撤銷了剛剛的add操作了

          撤銷Commit到本地庫的操作

          執(zhí)行了add和commit操作之后,這個時候已經(jīng)提交到本地倉庫了

          git reset --hard HEAD命令直接將本地文件回退到上一個提交版本,無論是add和commit的操作有沒有進行過

          其實add的撤回和Commit的撤回都可以直接用git reset命令直接完成,只是這個命令攜帶不同的參數(shù)代表著不同的含義,git reset [--mixed  --soft  --hard]  commitID有三種參數(shù),熟悉這三個參數(shù)的含義

          --mixed代表撤銷git add和git commit的操作,保留編輯器的代碼;

          --soft代表撤銷git commit,不撤銷git add操作,同時保留編輯器的代碼;

          --hard參數(shù)很暴力,直接撤銷commit和add的操作,撤銷所有改動的代碼,當(dāng)你決定用--hard參數(shù)的時候,就代表著你應(yīng)該已經(jīng)決定了放棄修改過的所有代碼咯

          撤銷push到遠(yuǎn)程的操作

          當(dāng)我們執(zhí)行了push操作之后,意味著代碼已經(jīng)推送到遠(yuǎn)程了,其實這種情況需要回滾的比較少,一般已經(jīng)提交的代碼不需要再次回滾了,如果哪里修改錯了,直接再次修改回來,再次提交即可

          當(dāng)然git也是考慮到這方面的,git加入了版本號這一概念,來解決這種問題,也就是每次推送都會生成一個對應(yīng)的版本號,我們可以利用版本號進行相應(yīng)的回滾

          通過git log查看歷史提交記錄

          將目標(biāo)版本號保留,也就是你要退回的版本號保留。如果git log無法正常顯示中文,執(zhí)行set LESSCHARSET=utf-8命令

          將本地的代碼撤銷到目標(biāo)版本號,git reset --hard   547c78001fd2e0eedf83382ef4ee2974e9f445d1,此時本地代碼已經(jīng)切換回該版本號相應(yīng)代碼

          強制提交,覆蓋遠(yuǎn)程代碼,git push --force執(zhí)行完了這一步,相應(yīng)版本號的代碼便已經(jīng)提交了,相應(yīng)的代碼也已經(jīng)回滾了

          慎重提交!reset命令會將你提交的版本號之后的提交版本全部消失掉,謹(jǐn)慎操作。

          其實,還有另外一種形式的回滾,叫做git revert,這種回滾是和git reset是不同的回滾方式,git revert其實和git reset操作步驟也是類似的

          reset和revert的區(qū)別

          給大家舉個例子吧,這樣更容易理解

          比如現(xiàn)在依次有版本1、2、3,reset會把修改的版本ID之后的版本都會消失掉,我執(zhí)行g(shù)it reset 1,那之后的版本2和3也就全部消失了,revert則是當(dāng)成一次新的提交版本,執(zhí)行了git revert 1之后,會保留2和3的代碼重新生成一個新的版本4,然后把版本4提交,所以這兩個的原理是不同的

          reset是回到某次提交,此次提交以及之前的Commit都會被保留,但是此次之后的修改都會被退回到暫存區(qū)

          revert則是生成一次新的Commit提交來撤銷某次提交,此次提交之前的Commit都會被保留,可以理解成把相應(yīng)版本的代碼刪除掉,再次提交

          reset的作用是修改HEAD的位置,即將HEAD指向的位置改變?yōu)橹按嬖诘哪硞€版本,如下圖所示,假設(shè)我們要回退到版本一

          適用場景:如果想恢復(fù)到之前某個提交的版本,且那個版本之后提交的版本我們都不要了,就可以用這種方法

          revert原理:git revert是用于反做某一個版本,以達到撤銷該版本的修改的目的。我們commit了三個版本1、2、3,突然發(fā)現(xiàn)版本2不行,想要撤銷版本2,但又不想影響版本3的提交,就可以用git revert命令來撤銷版本2,生成新的版本4,這個版本4保留了版本3的內(nèi)容,但撤銷了版本2的內(nèi)容

          使用場景:如果我們想要撤銷之前的某一個版本,但是又想要保留該目標(biāo)版本后面的版本,記錄下這個版本變動流程,就可以用這種方法

          搞清楚這兩個的關(guān)系之后,其實也就是可以根據(jù)相應(yīng)的業(yè)務(wù)場景來采用相應(yīng)的命令,一定要謹(jǐn)慎使用這兩個命令,尤其是reset的回退版本,因為git會把相應(yīng)版本之后的版本刪除掉

          總之,回退版本需謹(jǐn)慎

          拉取新分支

          命令行式

          切換基礎(chǔ)分支:先切換到要基于拉取的分支,我們開發(fā)中一般可能會基于master拉取的比較多,那就先切換到master(git checkout master)

          創(chuàng)建本地分支:git checkout -b new-branch

          提交到遠(yuǎn)程:git push origin new-branch

          設(shè)置關(guān)聯(lián):git pull一下拉取遠(yuǎn)程分支代碼會發(fā)現(xiàn)并未關(guān)聯(lián),OK lets do it

          git branch --set-upstream-to=origin/new-branch new-branch 來建立關(guān)聯(lián),第一個new-branch是遠(yuǎn)程分支名稱,第二個是本地名稱

          再次git pull一下,成功

          sourceTress式



          解決沖突

          解決沖突這種事情在工作中難免會遇到,工作意味著合作,合作意味著你們在同一個分支修改代碼,哪怕是在不同分支的代碼,最終你們修改的代碼上線也會合到相應(yīng)的上線分支,合到上線分支的時候也可能會出現(xiàn)沖突

          比如你需要在idea中合并兩個分支dev和master,你需要把dev合并到master,切換到dev分支,執(zhí)行g(shù)it pull將本地代碼更新為最新

          git checkout master切換到master分支,執(zhí)行g(shù)it pull更新為最新的代碼,執(zhí)行g(shù)it merge --no-ff dev(切換到目標(biāo)分支下執(zhí)行merge操作)

          如果有沖突,直接通過idea來解決就好了,這里會出現(xiàn)一個解決沖突的按鈕,點擊進行就可以看到哪些文件有沖突

          然后點擊每個沖突文件,選擇你想要保留的文件即可,最后點擊右下角的apply來應(yīng)用

          記住,此時你的idea是處于mergeing狀態(tài),當(dāng)你解決完了相應(yīng)的所有的沖突,你就可以去按照正常修改代碼來提交了,也就是上面說的那些add commit push一頓操作

          其實啊,解決沖突的工具或者說是方式,有很多種,每個人有自己的代碼對比工具來解決,當(dāng)用命令行或者用sourceTree來merge的時候有沖突,解決沖突用的最多的就是idea的git工具了,你可以選擇自己的代碼對比工具來進行代碼的解決沖突和merge操作


           


          求贊

           

          好了,以上就是全部內(nèi)容了,我是永遠(yuǎn)愛你們的小魚仙,你們的學(xué)習(xí)成長小伙伴 ,如果你感覺這篇文章對你有幫助了,點個關(guān)注吧,么么噠 

          我希望有一天能夠靠寫文章養(yǎng)活自己,現(xiàn)在還在磨練,這個時間可能會有很多年,感謝你們做我最初的讀者和傳播者。請大家相信,只要給我一份愛,我終究會還你們一頁情的。

          再次感謝大家能夠讀到這里,我后面會持續(xù)的更新技術(shù)文章以及一些記錄生活的靈魂文章,如果覺得不錯的,覺得大魚同學(xué)有點東西的話,求點贊、關(guān)注、分享三連

          哦,對了!后續(xù)的更新文章我都會及時放到這里,歡迎大家點擊觀看,都是干貨文章啊,建議收藏,以后隨時翻閱查看

          https://github.com/DayuMM2021/Java

           


          推薦閱讀


          ● 面試官問我:你確定用了BigDecimal后,計算結(jié)果一定精確?

             ● 這個GitHub地址,真香

          ● 消息隊列入門

             ● 搞懂什么是RocketMQ





          瀏覽 139
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99视频网站 | 豆花视频网站免费 | 国产精品久久久久久久久久久久久免费看 | 精品无码系列 | 爱干av麻豆 |