git中的分支管理:git branch,git checkout,解決git中的分支沖突的方法【Git學習三】

在這里插入圖片描述

😁 作者簡介:一名大四的學生,致力學習前端開發技術
??個人主頁:夜宵餑餑的主頁
? 系列專欄:Git等軟件工具技術的使用
👐學習格言:成功不是終點,失敗也并非末日,最重要的是繼續前進的勇氣

?🔥?前言:

這里是關于git的分支管理和多人協作時的知識,讓大家真正學會運用git的分支管理,而不是停留在命令上面,希望可以幫助到大家,歡迎大家的補充和糾正

文章目錄

    • 第三章 分支管理
      • 3.1 創建與合并沖突
      • 3.2 解決沖突
      • 3.3 分支管理策略
      • 3.4 Bug分支
      • 3.5 多人協作
        • 3.5.1 推送分支
        • 3.5.2 抓取分支

第三章 分支管理

3.1 創建與合并沖突

在版本回退里,你已經知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是當前分支。

一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:

                  HEAD││▼master││▼
┌───┐    ┌───┐    ┌───┐
│   │───?│   │───?│   │
└───┘    └───┘    └───┘

每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。

當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:

                 master││▼
┌───┐    ┌───┐    ┌───┐
│   │───?│   │───?│   │
└───┘    └───┘    └───┘▲││dev▲││HEAD

你看,Git創建一個分支很快,因為除了增加一個dev指針,改改HEAD的指向,工作區的文件都沒有任何變化!

不過,從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:

                 master││▼
┌───┐    ┌───┐    ┌───┐    ┌───┐
│   │───?│   │───?│   │───?│   │
└───┘    └───┘    └───┘    └───┘▲││dev▲││HEAD

假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合并:

                           HEAD││▼master││▼
┌───┐    ┌───┐    ┌───┐    ┌───┐
│   │───?│   │───?│   │───?│   │
└───┘    └───┘    └───┘    └───┘▲││dev

所以Git合并分支也很快!就改改指針,工作區內容也不變!

合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:

                           HEAD││▼master││▼
┌───┐    ┌───┐    ┌───┐    ┌───┐
│   │───?│   │───?│   │───?│   │
└───┘    └───┘    └───┘    └───┘

其他的命令可以在命令小結查找到,我這里說一下有點難理解的合并分支的命令:

$ git merge dev
Updating e5dfae5..2d46c90
Fast-forwardreadme.txt | 3 ++-1 file changed, 2 insertions(+), 1 deletion(-)

git merge命令用于合并指定分支到當前分支。合并后,再查看readme.txt的內容,就可以看到,和dev分支的最新提交是完全一樣的。

注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進模式”,也就是直接把master指向dev的當前提交,所以合并速度非常快。

當然,也不是每次合并都能Fast-forward,我們后面會講其他方式的合并

?? 命令小結

  • 查看分支:git branch
  • 創建分支:git branch <name>
  • 切換分支:git checkout <name>或者 git switch <name>
  • 創建并切換分支:git checkout -b <name> 或者 git switch -c <name>
  • 合并某個分支:git merge <name>
  • 刪除分支:git branch -d <name>

3.2 解決沖突

當我們創建一個feature1的分支,并修改了工作區文件的內容,然后add和commit到版本庫

當我們切換為master分支的時候,也修改了工作區文件的內容,還add和commit到版本庫

于是就出現這種情況:

                            HEAD││▼master││▼┌───┐┌─?│   │
┌───┐    ┌───┐    ┌───┐  │  └───┘
│   │───?│   │───?│   │──┤
└───┘    └───┘    └───┘  │  ┌───┐└─?│   │└───┘▲││feature1

這種我們使用分支合并的時候,無法快速合并,因為有分支沖突的存在,我們試看看:

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

我們可以看看readme文件是什么情況

Git is a distributed version control system.
Git is free software distributed under the GPL.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

這種時候我們需要手動修改文件,然后再提交:

Git is distributed version control system
Git is free software distributed under the GPL
Creating a new branch is quick AND simple

再提交:

$ git add readme.txt 
$ git commit -m "conflict fixed"

現在的分支圖變成了:

                                     HEAD││▼master││▼┌───┐    ┌───┐┌─?│   │───?│   │
┌───┐    ┌───┐    ┌───┐  │  └───┘    └───┘
│   │───?│   │───?│   │──┤             ▲
└───┘    └───┘    └───┘  │  ┌───┐      │└─?│   │──────┘└───┘▲││feature1

我們可以使用git log來查看分支的合并情況:

$ git log --graph --pretty=oneline --abbrev-commit
*   55a2d4f (HEAD -> master) conflict fixed
|\
| * 67d9043 AND simple
* | 5baf2da & simple
|/
* 2d46c90 brancj test
* e5dfae5 remove test
* d9d1dc0 add test.txt
* bbacedf append GPL
* c440278 add distributed
* 6fe56b1 wrote a readme file

最后,刪除feature1分支:

$ git branch -d feature1
Deleted branch feature1 (was 67d9043).

3.3 分支管理策略

我們通常在合并分支時,是有兩種模式的

  • Fast forward 模式(快速合并):

    • 當你在合并分支時,Git 會嘗試使用 Fast forward 模式,如果可能的話。
    • 如果兩個分支的提交歷史是線性的,也就是說,被合并的分支的所有提交都是基于當前分支的最新提交,那么 Git 可以簡單地將指針(HEAD)向前移動,指向被合并分支的最新提交,從而完成合并。
    • 這種模式下,合并操作不會創建新的合并提交,因為歷史是線性的,只需移動指針即可。
    bashCopy code# 在當前分支上合并名為 feature 的分支,使用 Fast forward 模式
    git merge feature
    
  • 普通合并(non-fast-forward)模式:

    • 如果兩個分支的提交歷史不是線性的,即存在分叉,Git 將執行普通合并。這種情況下,Git 會創建一個新的合并提交,將兩個分支的修改整合在一起。
    • 普通合并會保留每個分支的提交歷史,即使它們是并行的。
    bashCopy code# 在當前分支上合并名為 feature 的分支,強制執行普通合并
    git merge --no-ff feature
    

這兩種模式我們在使用時,如何選擇呢,我們可以來看看這兩種模式下產生的提交歷史:

  • Fast forward 模式(快速合并):

    • 沒有刪除分支:

      $ git log --graph --pretty=oneline --abbrev-commit
      * 62e7593 (HEAD -> master, dev) add dev
      *   55a2d4f conflict fixed
      |\
      | * 67d9043 AND simple
      * | 5baf2da & simple
      |/
      * 2d46c90 brancj test
      
    • 刪除分支了:

      ![外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=D%3A%5C%E5%AD%A6%E4%B9%A0%E4%B8%93%E4%B8%9A%E8%B5%84%E6%96%99%5Ctypora%E9%9B%86%E5%90%88%E5%9B%BE%E7%89%87%5CGit%E5%AD%A6%E4%B9%A0-%E5%BB%96%E9%9B%AA%E5%B3%B0%5C%E5%88%86%E6%94%AF%E5%90%88%E5%B9%B6%E5%86%B2%E7%AA%81%E5%BF%AB%E9%80%9F%E6%A8%A1%E5%BC%8F.png&pos_id=img-cdZuTlQN-1700291069221)$ git log --graph --pretty=oneline --abbrev-commit
      * 62e7593 (HEAD -> master) add dev
      *   55a2d4f conflict fixed
      |\
      | * 67d9043 AND simple
      * | 5baf2da & simple
      |/
      * 2d46c90 brancj test
      
    • 圖解:

      在這里插入圖片描述

  • 普通模式:

    • 沒有刪除分支:

      $ git log --graph --pretty=oneline --abbrev-commit
      *   16c6f76 (HEAD -> master) merge with no-ff
      |\
      | * d70cf45 (dev) add dev history
      |/
      * 62e7593 add dev
      *   55a2d4f conflict fixed
      |\
      | * 67d9043 AND simple
      * | 5baf2da & simple
      |/
      * 2d46c90 brancj test
      
    • 刪除分支了:

      $ git log --graph --pretty=oneline --abbrev-commit
      *   16c6f76 (HEAD -> master) merge with no-ff
      |\
      | * d70cf45 add dev history
      |/
      * 62e7593 add dev
      *   55a2d4f conflict fixed
      |\
      | * 67d9043 AND simple
      * | 5baf2da & simple
      |/
      * 2d46c90 brancj test
      
    • 圖解:
      在這里插入圖片描述

?? 總結

在實際開發中,我們應該按照幾個基本原則進行分支管理:

首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;

你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。

所以,團隊合作的分支看起來就像這樣

在這里插入圖片描述

合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并

3.4 Bug分支

軟件開發中,bug就像家常便飯一樣。有了bug就需要修復,在Git中,由于分支是如此的強大,所以,每個bug都可以通過一個新的臨時分支來修復,修復后,合并分支,然后將臨時分支刪除。

當你接到一個修復一個代號101的bug的任務時,很自然地,你想創建一個分支issue-101來修復它,但是,等等,當前正在dev上進行的工作還沒有提交:

$ git status
On branch dev
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   readme.txtno changes added to commit (use "git add" and/or "git commit -a")

👨 我的誤解:

我只是想切換到master分支,然后在master分支上面創建bug修改分支issue-101,我為什么不能直接切換呢?

🌴 答,在切換分支時,如果工作區有修改的話,與切換分支會有沖突的,切換分支會不成功,所以說,我們在切換分支時,應該保證切換分支之前的分支是干凈的,什么叫分支干凈呢?:一個分支是基于工作目錄(working directory)的狀態來維護的。當我們說"切換分支之前是干凈的狀態"時,意味著工作目錄中沒有未提交的更改。這包括對文件的修改、新文件的添加和已跟蹤文件的刪除。

所以我們要先搞清楚怎么把工作區目錄整理干凈

現在的問題是提交是可以解決問題,但是并不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎么辦?

幸好,Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

現在,用git status查看工作區,就是干凈的(除非有沒有被Git管理的文件),因此可以放心地創建分支來修復bug。

接下來就是正常的切換master分支,然后創建issue-101分支,在issue-101分支修復bug,然后合并分支到master

🆕 開始修復bug:

首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master創建臨時分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.(use "git push" to publish your local commits)$ git checkout -b issue-101
Switched to a new branch 'issue-101'

現在修復bug,需要把“Git is free software …”改為“Git is a free software …”,然后提交:

$ git add readme.txt 
$ git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 1011 file changed, 1 insertion(+), 1 deletion(-)

修復完成后,切換到master分支,并完成合并,最后刪除issue-101分支:

$ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.(use "git push" to publish your local commits)$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.readme.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

🔚 結束修復bug。

太棒了,原計劃兩個小時的bug修復只花了5分鐘!現在,是時候接著回到dev分支干活了!

$ git switch dev
Switched to branch 'dev'$ git status
On branch dev
nothing to commit, working tree clean

工作區是干凈的,剛才的工作現場存到哪去了?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法:

  • 一是用git stash apply恢復,但是恢復后,stash內容并不刪除,你需要用git stash drop來刪除;

  • 另一種方式是用git stash pop,恢復的同時把stash內容也刪了:

$ git stash pop
On branch dev
Changes to be committed:(use "git reset HEAD <file>..." to unstage)new file:   hello.pyChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   readme.txtDropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何stash內容了:

$ git stash list

你可以多次stash,恢復的時候,先用git stash list查看,然后恢復指定的stash,用命令:

$ git stash apply stash@{0}

🤔 在master分支上修復了bug后,我們要想一想,dev分支是早期從master分支分出來的,所以,這個bug其實在當前dev分支上也存在。

那怎么在dev分支上修復同樣的bug?重復操作一次,提交不就行了?

不,我們可以有更簡單的方法

同樣的bug,要在dev上修復,我們只需要把4c805e2 fix bug 101這個提交所做的修改“復制”到dev分支。注意:我們只想復制4c805e2 fix bug 101這個提交所做的修改,并不是把整個master分支merge過來。

👨 我的經驗:

🌴 就是一個問題,還是合并沖突的問題,如果我們把工作區給恢復之后,再去使用這個命令去合并分支會有錯誤:

$ git cherry-pick 3d22a83
error: Your local changes to the following files would be overwritten by merge:readme.txt
Please commit your changes or stash them before you merge.
Aborting
fatal: cherry-pick failed

依舊是工作區分支不干凈,導致無法合并分支,所以我們可以再合并分支之前,使用git status命令查看工作區是否干凈

所以,我們要先把工作區使用git stash存起來,然后在合并bug分支,在把工作區的內容給修復出來

對于合并沖突的情況有以下幾種:

  • 同時修改同一行或同一片區域: 如果兩個不同的分支都修改了同一行代碼,或者在相鄰的行上做了修改,Git 無法判斷應該保留哪個修改。這就導致了沖突。
  • 刪除與修改沖突: 一個分支刪除了某個文件,而另一個分支對該文件進行了修改。在合并時,Git 不知道是應該保留修改還是應該保留刪除。
  • 合并基的變更: 如果兩個分支的合并基(共同的祖先 commit)上有修改,而這些修改分別被兩個分支采用,那么在合并時就會發生沖突

🌴

為了方便操作,Git專門提供了一個cherry-pick命令,讓我們能復制一個特定的提交到當前分支:

$ git branch
* devmaster
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 1011 file changed, 1 insertion(+), 1 deletion(-)

Git自動給dev分支做了一次提交,注意這次提交的commit是1d4b803,它并不同于master的4c805e2,因為這兩個commit只是改動相同,但確實是兩個不同的commit。用git cherry-pick,我們就不需要在dev分支上手動再把修bug的過程重復一遍。

?? 小結

修復bug時,我們會通過創建新的bug分支進行修復,然后合并,最后刪除;

當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場;

在master分支上修復的bug,想要合并到當前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“復制”到當前分支,避免重復勞動。

3.5 多人協作

我們在對遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,遠程倉庫的默認名稱是origin

我們可以使用git remote來查看遠程看的信息:

$ git remote
origin

或者,用git remote -v顯式更詳細的信息:

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址

3.5.1 推送分支

推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

如果遠程倉庫不存在 dev 分支,Git 會嘗試創建該分支并將本地的 dev 分支推送到遠程倉庫。

📝 小提醒:在Git中,分支完全可以在本地自己玩,是否推送到遠程倉庫,你可以有選擇,要看需求的

3.5.2 抓取分支

在多人協作時,大家都會往master和dev分支上推送各自的修改

這種時候會有一種情況出現:A和B用戶都分別從遠程倉庫拉取或者克隆了代碼,這時候各自完成自己的代碼工作,A用戶先完成了,所以就把代碼推送到遠程倉庫去了,這種時候B用戶再繼續推送到遠程倉庫會失敗的,因為遠程倉庫的最新提交和B用戶試圖推送的提交有沖突

可以有以下解決方法:

  1. 首先,可以試圖用git push origin <branch-name>推送自己的修改;
  2. 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
  3. 如果合并有沖突,則解決沖突,解決的方法和分支管理中的解決沖突完全一樣,并在本地提交;
  4. 沒有沖突或者解決掉沖突后,再用git push origin <branch-name>推送就能成功!

? 產生的問題

有時候git pull時會出現這種情況:

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.git pull <remote> <branch>If you wish to set tracking information for this branch you can do so with:git branch --set-upstream-to=origin/<branch> dev

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置devorigin/dev的鏈接:

$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160523.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160523.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160523.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue2 識別頁面參數中的html

在Vue 2中&#xff0c;你可以使用v-html指令來識別頁面參數中的HTML內容。v-html指令允許你將HTML代碼作為Vue模板的一部分進行渲染。 以下是一個示例&#xff0c;演示了如何在Vue 2中使用v-html指令來識別頁面參數中的HTML內容&#xff1a; <template><div v-html&…

C語言計算一個數的 n 次方

1、要求 計算一個數的 n 次方&#xff0c;例如: 2 3&#xff0c;其中 2 為基數&#xff0c;3 為指數。 2、使用for循環 #include <stdio.h> int main(){int i,j,k,l1;printf("請輸入基數和指數&#xff1a;");scanf("%d %d",&i,&j);for(k…

雙流網絡論文精讀筆記

精讀視頻&#xff1a;雙流網絡論文逐段精讀【論文精讀】_嗶哩嗶哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 傳統的神經網絡難以學習到物體的運動信息&#xff0c;雙流網絡則通過光流將物體運動信息抽取出來再傳遞給神經網絡 給模型提供…

Golang 中的良好代碼與糟糕代碼

最近&#xff0c;有人要求我詳細解釋在 Golang 中什么是好的代碼和壞的代碼。我覺得這個練習非常有趣。實際上&#xff0c;足夠有趣以至于我寫了一篇關于這個話題的文章。為了說明我的回答&#xff0c;我選擇了我在空中交通管理&#xff08;ATM&#xff09;領域遇到的一個具體用…

linux部署jar 常見問題

1.java -jar xxx.jar no main manifest attribute, in xxx.jar 一.no main manifest attribute, in xxx.jar 在pom.xml文件中加入&#xff1a; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifac…

C語言每日一題(35)有效的括號

力扣網 20 有效的括號 題目描述 給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右…

CountDownLatch和CyclicBarrier

JUC&#xff08;Java.util.concurrent&#xff09;是Java 5中引入的一個并發編程庫&#xff0c;它包含了許多用于多線程處理的工具類和接口。JUC主要提供了以下特性&#xff1a; 線程池&#xff1a;線程池可以提高線程的使用效率&#xff0c;避免頻繁地創建和銷毀線程&#xff…

Kotlin學習——hello kotlin 函數function 變量 類 + 泛型 + 繼承

Kotlin 是一門現代但已成熟的編程語言&#xff0c;旨在讓開發人員更幸福快樂。 它簡潔、安全、可與 Java 及其他語言互操作&#xff0c;并提供了多種方式在多個平臺間復用代碼&#xff0c;以實現高效編程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Docker Swarm總結(2/3)

目錄 8、service 操作 8.1 task 伸縮 8.2 task 容錯 8.3 服務刪除 8.4 滾動更新 8.5 更新回滾 9、service 全局部署模式 9.1 環境變更 9.2 創建 service 9.3 task 伸縮 10、overlay 網絡 10.1 測試環境 1搭建 10.2 overlay 網絡概述 10.3 docker_gwbridg 網絡基礎…

【DevOps】Git 圖文詳解(八):后悔藥 - 撤銷變更

Git 圖文詳解&#xff08;八&#xff09;&#xff1a;后悔藥 - 撤銷變更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤銷提交 revert4.checkout / reset / revert 總結 發現寫錯了要回退怎么辦&#xff1f;看看下面幾種后悔指令吧&#xff01; ? 還沒提交的怎么撤銷&#x…

Visual Studio連接unity編輯器_unity基礎開發教程

Visual Studio連接unity編輯器 問題描述解決方法意外情況 問題描述 當我們在unity編輯器中打開C#腳本的時候發現Visual Studio沒有連接unity編輯器&#xff0c;在編寫代碼的時候也沒有unity關鍵字的提醒。 簡單來說就是敲代碼沒有代碼提示。 解決方法 這時候需要在unity中進行…

Qt實現圖片旋轉的幾種方式(全)

目錄 一、用手搓&#xff08;QPainter&#xff09; 二、使用 QGraphicsView 和 QGraphicsPixmapItem 三、使用 QTransform 實現圖像旋轉 四、利用 OpenGL 實現旋轉圖像的效果有幾種不同的方法&#xff0c;其中常見的包括&#xff1a; 手動旋轉繪制&#xff1a; 使用 QPaint…

網絡吞吐量 公網帶寬有關嗎?

環境&#xff1a; 華為交換機 深信服防火墻 問題描述&#xff1a; 網絡吞吐量 公網帶寬有關嗎&#xff1f; 解決方案&#xff1a; 網絡吞吐量網絡吞吐量是指在特定時間內通過網絡傳輸的數據量。它衡量了網絡設備&#xff08;如防火墻、交換機、路由器&#xff09;或網絡連…

終端仿真軟件 SecureCRT v9.4.2

SecureCRT是一款終端仿真軟件&#xff0c;它提供了類似于Telnet和SSH等協議的遠程訪問功能。SecureCRT專門為網絡管理員、系統管理員和其他需要保密訪問網絡設備的用戶設計。 SecureCRT具有以下特點&#xff1a; 安全性&#xff1a;SecureCRT支持SSH1、SSH2、SSL和TLS等加密和…

素短語的定義

素短語&#xff0c;是指至少含有一個終結符的短語&#xff0c;并且除自身外&#xff0c;不包含更小的素短語。 最左素短語是句型中最左邊的素短語。

7.HTML中列表標簽

7.列表標簽 7.1無序列表&#xff08;重點&#xff09; 表格是用來顯示數據的&#xff0c;那么列表就是用來布局的。 列表最大的特點就是整齊&#xff0c;整潔&#xff0c;有序&#xff0c;他作為布局會更加自由和方便&#xff0c; 根據使用的情景不同&#xff0c;列表可分為三…

數字圖像處理(岡薩雷斯)學習筆記

目錄 一.機器視覺和計算機視覺二.圖像處理基礎1.什么是圖像2.如何訪問圖像 三.圖像仿射變換四.灰度變換 一.機器視覺和計算機視覺 機器視覺(Machine Vision,MV)和計算機視覺(Computer Vision&#xff0c;CV)的區別和聯系&#xff1a; 機器視覺更注重廣義圖像信號(激光&#xff…

C#中的Fody

在C#中&#xff0c;NuGet里的Fody是一個用于.NET應用程序的代碼增強工具。它通過在編譯過程中自動織入代碼&#xff0c;改變目標程序集的行為。Fody的一個常見用途是簡化屬性通知的實現&#xff0c;特別適用于WPF綁定。 在WPF中&#xff0c;屬性通知是一種機制&#xff0c;用于…

C語言操作符例題

這里寫目錄標題 例題一題目解析 例題二題目解析 例題三方法一方法二方法三 例題四例題五 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 &#x1f412;&#x1f412;&#x1f412; 個人主頁 &#x1f978;&#x1f978;&#x1f978; C語言 &#x1f43f;?…

智能指針(Newbie Note)

智能指針專題 1.普通指針的問題2.智能指針是什么什么是所有權 3.智能指針三個好處&#xff1a;4.C11提供的智能指針4.1 shared_ptr&#xff08;共享所有權指針&#xff09;4.1.1 分配內存4.1.2 成員函數4.1.3 計數情況匯總&#xff1a;4.1.4 示例代碼(計數)4.1.5 示例代碼(rese…