日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

git branch 为什么会进入编辑状态_最好的Git分支管理教程

發(fā)布時(shí)間:2023/12/19 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git branch 为什么会进入编辑状态_最好的Git分支管理教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Git最難學(xué)習(xí)的就是Git的多分支問題,不同操作會(huì)對(duì)當(dāng)前分支造成什么影響,比如相同初始狀態(tài),類似操作,rebase和merge的不同結(jié)果。

rebase(左),merge(右)

教程簡(jiǎn)介

推薦一個(gè)非常通俗易懂的Git多分支教程:

Learn Git Branching?learngitbranching.js.org

學(xué)習(xí)時(shí)長(zhǎng):0.5-1天

教程特點(diǎn):

  • 將各個(gè)知識(shí)點(diǎn)劃分成關(guān)卡,像打游戲一樣學(xué)習(xí)。
  • 所有操作均產(chǎn)生動(dòng)態(tài)變化過程(可視化),十分容易理解。
  • 每個(gè)知識(shí)點(diǎn)都帶練習(xí),看完講解后親手輸命令看結(jié)果,加深印象。

不同關(guān)卡

教程平臺(tái)自己的命令:

  • 左邊console輸入levels命令,調(diào)出關(guān)卡頁(yè)。
  • reset:reset習(xí)題為初始狀態(tài)。
  • undo:undo上一條git命令。

更多命令及設(shè)置:教程GitHub頁(yè)

上手教程

初接觸Git的朋友需要簡(jiǎn)單了解下Git的基礎(chǔ)知識(shí),即可輕松上手這個(gè)教程。

Git分為local和remote,一個(gè)典型的Git工作流:

  • http://github.com上建一個(gè)repo(remote),clone到local。
  • 修改后,git add –-all將所有修改加入staging area。
  • commit到local repo。
  • push到remote repo。
  • 圖片來(lái)源

    教程要點(diǎn)

    A 圖例

    如下圖,一個(gè)節(jié)點(diǎn)(狀態(tài))對(duì)應(yīng)一次commit。節(jié)點(diǎn)的標(biāo)識(shí)(i.e. c0)表示commit記錄的hash值,可用git log查看。

    c1->c0表示c1是在c0基礎(chǔ)上的commit。當(dāng)你只有l(wèi)ocal或remote時(shí),只有左邊實(shí)線狀態(tài)圖;兩者都有時(shí),則用實(shí)線表示local狀態(tài)(左),虛線表示remote狀態(tài)(右)。

    local的master, o/master,remote的master都是branch name,其中o/是origin/,教程中用o/簡(jiǎn)寫。

    默認(rèn)local master跟蹤o/master,o/master跟蹤remote master。(跟蹤track見教程)

    local的HEAD表當(dāng)前狀態(tài),若HEAD和某個(gè)branch(i.e. master)相同時(shí),則省略HEAD,并在該branch上加*,表該branch是當(dāng)前狀態(tài)(i.e. master*)。

    B 主要命令匯總

  • 創(chuàng)建、移動(dòng)分支:branch, checkout
  • 撤銷變更:reset, revert
  • 合并/整理記錄:merge, rebase
  • 遠(yuǎn)程相關(guān):pull, push
  • 其他:cherry-pick,PR問題
  • 1 創(chuàng)建、移動(dòng)分支

    branch, checkout

    創(chuàng)建:

    git branch <branch> git checkout -b <branch>

    移動(dòng):

    git checkout <branch> # 切換到<branch>

    分離HEAD:

    git log # 查看commit記錄 git checkout <commit記錄hash前幾位> # 將HEAD指向一個(gè)狀態(tài)

    相對(duì)引用:^和~

    • ^表上一節(jié)點(diǎn),^<num>表第<num>個(gè)父節(jié)點(diǎn)。
    • ~也表上一節(jié)點(diǎn),~<num>表往上<num>個(gè)節(jié)點(diǎn)。
    • ^ ~支持鏈?zhǔn)讲僮?#xff0c;如^2~3:第二個(gè)父節(jié)點(diǎn)往上3個(gè)節(jié)點(diǎn)。
    git checkout master^2 # 將HEAD移到master第2個(gè)父節(jié)點(diǎn)

    強(qiáng)制移動(dòng)branch:

    git branch -f master HEAD~3 # 強(qiáng)制移動(dòng)master到當(dāng)前節(jié)點(diǎn)往上三個(gè)節(jié)點(diǎn)的位置

    bugFix*表HEAD指向bugFix,故HEAD~3為bugFix~3。

    2 撤銷變更

    reset, revert

    • 這里是git reset,區(qū)別平臺(tái)自己的reset命令。
    • reset:回滾到之前某一狀態(tài)。
    • revert:增加新節(jié)點(diǎn),復(fù)制之前某一狀態(tài)。
    git reset HEAD~1

    reset后并不是直接刪除,git log查到c2記錄,還可以checkout或branch -f恢復(fù)c2。

    git revert c0

    3 合并/整理記錄

    merge, rebase

    先來(lái)看下兩個(gè)命令各自的效果:

    初始(左)HEAD指向master,將master整理/合并到o/master上:

    • git rebase o/master(中)
    • git merge o/master(右)

    可以看出,相比merge,rebase:

    • 優(yōu)點(diǎn):rebase使?fàn)顟B(tài)圖變得很干凈,所有commit都在一條線上。
    • 缺點(diǎn):rebase修改了狀態(tài)圖歷史。

    rebase還支持交互式操作,只需加上-i (--interactive)參數(shù)。

    pick就是下面omit刪除后,重新拾回。

    e.g.

    git rebase -i HEAD~4

    4 遠(yuǎn)程相關(guān)

    pull, push

    pull和push對(duì)應(yīng)。因?yàn)閜ull = fetch + merge,pull –rebase = fetch + rebase,故先解釋下fetch:

    fetch的使用場(chǎng)景是當(dāng)clone后remote又有了非local的新的commit:

    remote有了新commit(左),fetch后(右)

    具體來(lái)說(shuō),fetch完成了兩步操作:

  • 從remote下載local缺失的狀態(tài)。
  • 更新local對(duì)應(yīng)remote的指針(i.e. o/master)。
  • pull = fetch + merge:

    git pull先f(wàn)etch c3到local,并移動(dòng)o/master指向local c3;然后將當(dāng)前狀態(tài)(master*)和o/master merge 。

    git pull

    pull –rebase = fetch + rebase:

    上例用pull –rebase的話

    push和pull對(duì)應(yīng),是將remote沒有的local狀態(tài)上傳,并更新相關(guān)指針。

    git push

    push和pull都有兩種帶參數(shù)的形式:

    下面的<remote>就是remote repo,默認(rèn)是origin。push <remote> <local branch>

    將<local branch>上remote沒有的狀態(tài)上傳,并更新相關(guān)指針。

    push <remote> <local狀態(tài)>:<remote branch>

    和第一條的區(qū)別:(1)只要是<local狀態(tài)>就行,即使沒branch指向。(2)上傳到指定<remote branch>,若remote無(wú)<remote branch>,則會(huì)自動(dòng)新建。

    pull <remote> <remote branch> pull <remote> <remote狀態(tài)>:<local branch>?其實(shí)無(wú)參數(shù)的push和pull就是同步所有變化。

    e.g.

    初始狀態(tài):

    git push origin foo

    git push origin c5:foo

    5 其他

    cherry-pick,PR問題

    cherry-pick也是用于整理記錄的,可實(shí)現(xiàn)pick部分狀態(tài)到當(dāng)前branch上。

    e.g.

    git cherry-pick c2 c4

    PR問題:以remote master分支為例,若remote將master鎖定,則git push時(shí)會(huì)返回

    ! [遠(yuǎn)程服務(wù)器拒絕] master -> master (TF402455: 不允許推送(push)這個(gè)分支; 你必須使用pull request來(lái)更新這個(gè)分支.)

    即不允許直接push到master。

    解決:新建一個(gè)分支,push這個(gè)分支,并提交pull request。

    總結(jié)

    以上是生活随笔為你收集整理的git branch 为什么会进入编辑状态_最好的Git分支管理教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。