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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 移动分支指针_git 分支( branch ) 的基本使用

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 移动分支指针_git 分支( branch ) 的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分支( branches ) 是指在開發主線中分離出來,做進一步開發而不影響到原來主線。

Git 存儲的不是一系列的更改集( changeset ),而是一系列快照。當你執行一次 commit 時, Git 存儲一個 commit 對象,它包含一個指針指向你當前需要提交的內容的快照。

Git 中的 master 分支的功能,和其他分支一樣。master 在 git 項目中常見到,是因為 git init 命令運行時默認創建一個分支,并命名為 master。

創建一個新的分支,就是創建一個新的指針,用來在快照間移動。Git 通過 HEAD 指針,指向當前工作的本地分支。

$ git branch testing

使用 git checkcout 命令,可以切換分支。

$ git checkout testing

修改文件并 commit 代碼后,會移動分支的指針

$ vim test.rb $ git commit -a -m 'update test.rb'

通過 checkout 可以切換回去 master 分支。下面的命令做了兩件事,一是把 HEAD 指針指向了 master 分支,二是當前工作目錄的文件恢復到了 master 所指向的快照版本。也就是說 87ab2 提交的變動,在切換到 master 分支時被移除。

$ git checkout master

再做一些變更和 commit 。注意,此時歷史記錄開始出現分叉。

$ vim test.rb $ git commit -a -m 'make other changes'

Git 中的分支,實際上是一個簡單的包含 40 個字符的文件,這 40 個字符是一次提交所產生的 SHA-1 checksum。所以,在 Git 中創建和銷毀一個分支的成本非常低。這個和其他大多數版本管理系統比起來,Git 無需拷貝整個項目的文件,是一個巨大的不同點。

基本的分支與合并

下面的例子是一個比較常見的場景,應用了分支與合并的功能。

  • 在開發一個網站
  • 創建一個分支 ( iss53 ),用于處理新的項目需求( user story )
  • 在這個分支上,做了一些工作
  • 這時,接收到另一個緊急的問題,需要立刻修復( hotfix )

      4. 切換到生產環境分支

      5. 創建一個新的分支 ( hotfix ),用于修復線上問題

      6. 測試過后,把修復分支合并到主分支上,并推送到生產環境

      7. 切換到原來的需求分支,繼續工作

    最開始的狀態如下

    通過 branch / checkout / commit 等操作,做到上面的第 5 步, 狀態如下

    接下來,先合并 hotfix 分支,然后部署到線上環境。

    $ git checkout master $ git merge hotfixUpdating f42c576..3a0874c Fast-forward index.html | 2 ++ 1 file changed, 2 insertions(+)

    上面的提示中,有 Fast-forward 字眼,表明 hotfix 分支指向的 c4 提交,是 master 分支指向的 c3 提交的祖先,因此,直接把 master 移動到 c4 即可。合并后效果關系如下

    由于 hotfix 已經合并到 master 分支,此時 master 和 hotfix 指向同一個地方,后續不在需要用到 hotfix 分支,所以可以刪除。

    $ git branch -d hotfix

    下來了可以切換到 iss53 分支繼續工作,繼續修改,然后提交。當修改完畢后,關系大致如下

    $ git checkout iss53Switched to branch "iss53" $ vim index.html $ git commit -a -m 'finished the new footer [issue 53]'[iss53 ad82d7a] finished the new footer [issue 53]1 file changed, 1 insertion(+)

    接下來開始合并。

    $ git checkout masterSwitched to branch 'master' $ git merge iss53Merge made by the 'recursive' strategy.index.html | 1 +1 file changed, 1 insertion(+)

    這里合并沒有了 Fast-forward 字眼,因為不是簡單的移動分支指針。Git 采用三路合并( three-way merge ) 方式進行合并,創建了一個 commit ( c6 ),用于包含合并后的結果。三路合并方式,是指通過兩個分支的最新提交( c4 和 c5 ),以及他們的共同祖先 c2,來進行分支合并。c6 是一個合并提交記錄,特別之處是有兩個祖先。

    此時,你已不在需要 iss53 分支,可以刪除它.

    $ git branch -d iss53

    基本合并沖突處理

    如果兩個分支修改同一個文件的同一個部分,例如同一行代碼,Git 不知道如何合并,認為這是一個沖突。例如你在 iss53 和 hotfix 分支都修改了 index.html 文件的同一個部分,合并 iss53 到已包含 hotfix 的 master 分支時,效果如下

    $ git merge iss53Auto-merging index.htmlCONFLICT (content): Merge conflict in index.htmlAutomatic merge failed; fix conflicts and then commit the result.

    此時,自動合并暫停,需要手動合并。 git status 顯示沖突了的文件

    $ git statusOn branch masterYou have unmerged paths.(fix conflicts and run "git commit")Unmerged paths:(use "git add <file>..." to mark resolution)both modified: index.htmlno changes added to commit (use "git add" and/or "git commit -a")

    Git 在沖突的文件中添加標準的沖突解決標識。

    <<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer"> please contact us at support@github.com </div> >>>>>>> iss53:index.html

    這個表明,HEAD 版本的代碼是 ======= 以上部分,iss53 的版本是 ======= 以下部分。

    開打 index.html 文件,修改成自己想要的版本,并剔除 <<<<<<< ======= >>>>>>> 標識,然后用 git add 標識沖突已接近,然后git commit 提交解決沖突后的版本。

    參考資料

    3.1 Branches in a Nutshell, git-scm

    3.2 Basic Branching and Merging, git-scm

    總結

    以上是生活随笔為你收集整理的git 移动分支指针_git 分支( branch ) 的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。