織夢做電子商務網(wǎng)站小紅書seo排名帝搜軟件
git詳細教程
- 區(qū)域劃分
- 單分支操作
- git log
- 語法
- 常用的參數(shù)及其詳解
- git log 結(jié)果
- git reflog
- git diff
- 常用的參數(shù)及其詳解
- git reset
- 常用的參數(shù)及其詳解
- git checkout
- git rm
- 常用的參數(shù)及其詳解
- git remote
- 常用的參數(shù)及其詳解
- 多分支切換代碼融合
- git switch
- 常用的參數(shù)及其詳解
- git branch
- 常用的參數(shù)及其詳解
- git merge
- 常用的參數(shù)及其詳解
- git cherry-pick
- 常用的參數(shù)及其詳解
- 暫存
區(qū)域劃分
在 Git 中,有三個主要的區(qū)域,用于管理文件的狀態(tài)和版本控制。這三個區(qū)域分別是:工作區(qū)(Working Directory) 暫存區(qū)(Staging Area) 版本庫(Repository)。
工作區(qū)(Working Directory)
:工作區(qū)是你在電腦上實際進行文件編輯和修改的地方。這里包含了項目的所有文件,包括已經(jīng)被 Git 管理的文件和未被 Git 管理的文件。
暫存區(qū)(Staging Area)
:暫存區(qū)是一個中間區(qū)域,你可以將工作區(qū)中的文件添加到暫存區(qū)。在 添加到暫存區(qū)(add) 之后,這些文件就處于等待被提交的狀態(tài)。暫存區(qū)的主要功能是允許你對提交做出更細粒度的控制。
版本庫(Repository)
:版本庫是 Git 的核心部分,用于存儲項目的所有歷史記錄和元數(shù)據(jù)。當你 執(zhí)行提交(commit) 操作后,暫存區(qū)中的文件會被復制到版本庫中,并生成一次新的提交記錄。
簡單來說,工作區(qū)是你實際進行編輯和修改的地方,暫存區(qū)是存放準備提交的文件的地方,而版本庫則是存儲所有歷史記錄的地方。
通過這三個區(qū)域的結(jié)合使用,你可以有效地管理和追蹤項目中文件的狀態(tài)和變化,并進行版本控制。
注:
HEAD
: 指針,指向的本地版本庫的當前版本 HEAD^ 指針的上一個版本
單分支操作
git init #初始化git
git log #查看當前分支歷史提交記錄
git reflog #查看Git日志,歷史提交記錄
git clone git@github.com:vvd/vvd.git #克隆指定的遠程倉庫到本地,在本地創(chuàng)建一個與遠程倉庫完全一樣的副本
git status #查看當前工作區(qū)狀態(tài)
git diff #對比顯示未暫存的變更
git checkout -- readme.txt #撤銷在工作區(qū)中被修改但尚未被添加到暫存區(qū)的內(nèi)容 例如將誤刪的文件找回 刪修改
git add #將工作區(qū)的文件添加到暫存區(qū)
git reset HEAD readme.txt #取消暫存的文件 不刪修改
git commit #將暫存區(qū)的文件添加到版本庫中
git reset HEAD^ #撤銷上一次提交 不刪修改
git checkout HEAD^ #撤銷上一次提交 刪修改
git pull #將遠程版本庫的代碼拉至本地版本庫
git push #將本地版本庫代碼推送至遠程庫中
git diff #比較文件差異
git log
git log
是一個用于查看 Git 提交歷史記錄的命令。它列出了當前分支上的所有提交,并提供有關每個提交的詳細信息,如提交作者、提交時間、提交消息等。
語法
git log [<options>] [<revision range>] [--] [<path>...]
以下是命令中各個部分的說明:
<options>
:用于控制 git log
命令的輸出方式和內(nèi)容的選項。例如 --oneline
、--graph
等。
<revision range>
:可選參數(shù),用于指定查看哪些提交的范圍。例如分支名稱、提交哈希值、標簽名稱等。如果未指定范圍,則默認為當前分支的所有提交。
--
:可選參數(shù),用于隔離路徑參數(shù)。如果指定了<path>
參數(shù),則 git log
將只顯示與指定路徑相關的提交。
<path>
:可選參數(shù),用于指定與路徑相關的提交。只顯示與指定路徑相關的提交。
常用的參數(shù)及其詳解
--oneline
: 以緊湊的格式顯示每個提交的簡略信息,只顯示提交的哈希值和提交消息。
--pretty=oneline
: 同上,區(qū)別是顯示的提交哈希值為完整信息
--graph
: 在提交歷史的左側(cè)顯示 ASCII 字符以形成圖形表示,展示分支和合并的情況。
--author=<author>
: 按照作者篩選提交記錄,只顯示指定作者的提交歷史。
--since=<date>
: 只顯示指定日期以后的提交記錄。
--until=<date>
: 只顯示指定日期之前的提交記錄。
--grep=<pattern>
: 按照指定的模式匹配提交消息,只顯示匹配的提交記錄。
--follow
: 如果指定的文件在提交過程中被重命名或移動,繼續(xù)顯示它們的歷史。
--stat
: 顯示每個提交的簡略統(tǒng)計信息,包括修改的文件和插入/刪除的行數(shù)。
--patch
: 顯示每個提交的詳細差異信息,包括修改的文件和修改內(nèi)容的具體行。
--decorate
: 在提交歷史中顯示分支和標簽的名稱。
--abbrev-commit
: 使用較短的提交哈希值顯示提交記錄。
--pretty=<format>
:指定自定義的輸出格式。例如:
git log --pretty=format:"%h - %an, %ad : %s"`
d87f4c2 - name, Mon Sep 18 13:47:21 2023 +0300 : Added new feature: login functionality%H:提交的完整哈希值。
%h:提交的短哈希值。
%an:作者的姓名。
%ae:作者的電子郵件地址。
%ad:作者日期(使用日期格式)。
%s:提交的標題/消息。
%cn:提交者的姓名。
%ce:提交者的電子郵件地址。
%cd:提交日期(使用日期格式)。
git log 結(jié)果
git logcommit d87f4c26a6f2a682e8e029d209a5e7b48330c60e (HEAD -> main, origin/main origin/HEAD)
Author: John Smith <john@example.com>
Date: Mon Sep 18 13:47:21 2023 +0300Added new feature: login functionalitycommit 0b427baffe75d4e24e690a88821982a4f19a5e79 (origin/develop)
Author: Jane Doe <jane@example.com>
Date: Fri Sep 15 09:22:47 2023 +0300Fixed bug in registration form validationcommit 0b427baffe75d4e24e690a88821982a4f19a5e79
Merge: 346f84a c1bf48e
Author: John Smith <john@example.com>
Date: Fri Sep 20 10:15:52 2023 +0300Merge branch 'feature/login' into mainResolved conflicts and added login featureCommit c1bf48e fixed bug in navigation menuCommit 346f84a added new feature: search functionality
示例中,每個提交記錄都有以下主要部分:
提交哈希值(commit hash
): commit d87f4c26a6f2a682e8e029d209a5e7b48330c60e
它是用于唯一標識提交記錄的字符串,可以用來在 Git 中引用這個提交。
作者(Author
): Author: John Smith john@example.com
顯示了提交者的姓名和郵箱地址。
提交日期(Date
): Date: Mon Sep 18 13:47:21 2023 +0300
表示提交的時間戳,包括日期和時間信息。本例中的 +0300 表示時間偏移值。
提交消息(Commit message
): Added new feature: login functionality
提交者在提交代碼時提供的描述信息,用于說明該次提交的目的和內(nèi)容。
Merge commit信息(Merge commit message
): Merge: 346f84a c1bf48e
如果當前提交是一個合并提交(Merge commit),則會顯示這個合并提交的信息,包括被合并的分支和父提交。
分支和標簽(Branches and tags
): (HEAD -> main, origin/main origin/HEAD)
如果提交記錄所在的分支或標簽存在,則會在括號內(nèi)的標記提供了分支和遠程分支的相關信息。是幫助理解當前所在分支及其對應的遠程分支的位置和追蹤關系的指示器,
其中
HEAD
: 表示當前所在的分支。在這個例子中,HEAD 指向main分支,說明當前所在的分支是 main。
main
: 表示當前所在的本地分支。這是倉庫中的一個分支名稱。
origin/main
: 表示 main 遠程分支的引用。origin 是遠程倉庫的名稱,而 origin/main 則表示該倉庫中 main 分支的引用。
origin/HEAD
: 表示 origin 遠程倉庫中當前所在的分支。origin/HEAD 是一個特殊的指針,它指向 origin 倉庫中當前活動的分支。
git reflog
git reflog
是一個用于查看 Git 引用日志(reference log)的命令。它記錄了本地倉庫中的引用(如分支、標簽等)的更新歷史,包括這些引用的創(chuàng)建、更新以及刪除操作。
即:記錄你的每一次命令!
通過 git reflog,你可以查看最近的引用操作歷史,以便進行回退、恢復、分析或修復操作。如果意外地刪除了分支、標簽等引用,可以使用 git reflog 來找回被刪除的引用。
需要注意的是,git reflog 記錄的日志信息是針對本地倉庫的操作歷史,不同的本地倉庫之間的 git reflog 是相互獨立的。
git diff
git diff
是一個用于比較文件差異的命令。它可以比較不同的 Git 對象之間的差異,如工作區(qū)和暫存區(qū)之間的差異,或者暫存區(qū)和最新提交之間的差異。幫助了解和管理項目中的更改內(nèi)容。
常用的參數(shù)及其詳解
git diff
:比較 工作區(qū)中的文件和暫存區(qū)之間的差異。這將顯示哪些文件已修改但尚未被添加到暫存區(qū)。
git diff --cached
:比較暫存區(qū)和最新提交之間的差異。這將顯示將要被提交的更改內(nèi)容。
git diff --staged
:與 git diff --cached
相同,比較暫存區(qū)和最新提交之間的差異。
git diff <commit> <commit>
:逐一比較兩個提交之間的文件差異,顯示每個文件的具體變化。
git diff <commit>..<commit>
:比較兩個提交之間的提交范圍與工作區(qū)的差異,以統(tǒng)計信息的方式顯示差異情況。
git diff <branch>..<branch>
:比較兩個分支之間的差異。
git diff --color-words
:以單詞為單位顯示差異,更易讀。
git diff --stat
:只顯示差異的統(tǒng)計信息,包括修改的文件、插入的行和刪除的行等。
git diff --ignore-space-change
:忽略空格變化,只關注實際的代碼更動。
git diff --name-only
:只顯示發(fā)生變更的文件名,而不顯示具體的差異內(nèi)容。
git reset
git reset
是一個用于撤銷提交和調(diào)整當前分支指針的 Git 命令,只能在本地倉庫中使用。請記住在使用之前要確保理解其影響,并小心地考慮操作對代碼庫的影響。不要在與他人共享的分支上使用,以免引起沖突和問題。
取消暫存文件:git reset 或 git reset HEAD 可以取消暫存文件。如果你已經(jīng)使用 git add 將文件添加到暫存區(qū),但又不想提交它們,可以使用此命令將文件從暫存區(qū)移除并保留在工作區(qū)。
git reset HEAD readme.txt
撤銷提交:git reset HEAD~<n>
可以撤銷最近的 個提交。 在Git中,用HEAD表示當前版本,也就是最新的提交哈希值,上一個版本就是HEAD^
,上上一個版本就是HEAD^^
, 當然往上100個版本寫100個^比較容易數(shù)不過來,所以寫成HEAD~100
。
git reset HEAD^
git reset HEAD~2
git reset HEAD readme.txt
和git reset HEAD~2
是不同的命令,它們的作用和效果有所不同:
git reset HEAD readme.txt
:這個命令將取消 readme.txt 文件的暫存狀態(tài),也就是將文件從暫存區(qū)移除,但保留其在工作區(qū)中的更改。這個命令通常用于撤銷對文件的暫存操作,使文件重新變?yōu)槲磿捍鏍顟B(tài)。git reset HEAD~2
:這個命令將當前分支指針(HEAD)重置到前兩個提交之前的位置。它會移動分支指針,丟棄那兩個提交以及之后的所有提交。此操作會修改版本歷史,要謹慎使用。默認情況下,這個命令將暫存區(qū)和工作區(qū)重置為重置之前的狀態(tài),即丟棄那兩次提交帶來的修改。所以,這兩個命令的區(qū)別在于:
git reset HEAD readme.txt
撤銷指定文件的暫存狀態(tài)。git reset HEAD~2
則是將分支指針移動到前兩個提交之前的位置,并相應地重置暫存區(qū)和工作區(qū),丟棄這兩個提交帶來的更改。
調(diào)整分支指針:git reset <commit>
可以將當前分支指針移動到指定的 <commit>
,并將之后的提交丟棄。該操作會修改版本歷史,慎用。常見的選項有:
常用的參數(shù)及其詳解
--soft
: 僅移動分支指針,保留修改和暫存區(qū)的內(nèi)容。此時可以使用 git commit 重新提交。
--mixed
(默認選項): 僅移動分支指針,保留修改和暫存區(qū)的內(nèi)容。此時可以使用 git add 和 git commit 重新處理更改。
--hard
: 這個選項是最徹底的選項,它會完全刪除指定提交及其之后的所有提交,移動分支指針,重置暫存區(qū)和工作區(qū),丟棄修改。使用該選項需要謹慎,因為它會永久刪除你的更改,無法恢復。
git reset d87f4c26a6f2a682e8e029d209a5e7b48330c60e
注意: Git必須知道要將指針打到哪個版本上:
- 用
git log
可以查看提交歷史,以便確定要回退到哪個版本。要重返意外回退的版本,- 用
git reflog
查看命令歷史,以便確定要回到之前意外回退的哪個版本。
git checkout
git checkout
是一個在 Git 中用于切換分支、恢復文件和檢出提交的命令。
恢復文件:git checkout -- <file>
撤銷在工作區(qū)中被修改但尚未被添加到暫存區(qū)的內(nèi)容,將其恢復到最近一次提交的狀態(tài)。這對于丟棄未保存的更改或修復錯誤修改很有用。例如,運行 git checkout – myfile.txt 將撤銷對 “myfile.txt” 文件的修改。
git checkout -- readme.txt
切換分支:git checkout <branch>
可用于切換到指定的分支。將使你的工作區(qū)和版本庫中的文件變?yōu)樵摲种У淖钚聽顟B(tài)。
git checkout feature #切換到名為 “feature” 的分支
創(chuàng)建并切換分支:git checkout -b <branch>
可用于創(chuàng)建一個新的分支并立即切換到該分支。
git checkout -b feature # 創(chuàng)建并切換到名為 “feature” 的新分支
檢出提交:git checkout <commit>
可用于將工作區(qū)和版本庫狀態(tài)恢復到指定提交的狀態(tài)。這會導致分離頭指針(detached HEAD),在這種模式下,你不會處于任何分支上,所以任何提交將會導致一個匿名分支。使用 git checkout 需要指定提交的哈希值或引用名。例如,git checkout HEAD~2 將使工作區(qū)和版本庫恢復到倒數(shù)第二次提交的狀態(tài)。
git checkout HEAD~2
和git reset HEAD~2
在功能上有所不同:
git checkout HEAD~2
:這個命令會將分支指針移動到前兩個提交之前的位置,并切換到該提交狀態(tài)。在執(zhí)行完這個命令后,你將進入“分離頭指針”狀態(tài),即不再位于任何分支上。工作區(qū)和暫存區(qū)將被重置為該提交的內(nèi)容。這意味著你將丟失當前分支上未提交的更改,并且切換到的那個提交的內(nèi)容將成為工作區(qū)和暫存區(qū)的內(nèi)容。git reset HEAD~2
:這個命令會將分支指針移動到前兩個提交之前的位置,并重置暫存區(qū)為該位置的內(nèi)容,但保留工作區(qū)的修改。這意味著你可以保留當前分支上未提交的更改,并將它們保留在工作區(qū)中。暫存區(qū)則被重置為之前的狀態(tài),即丟棄了最近的兩個提交帶來的修改。這個命令通常用于撤銷之前的提交或重新組織提交歷史。所以,這兩個命令的區(qū)別在于:
git checkout HEAD~2
會切換到指定提交狀態(tài),并重置工作區(qū)和暫存區(qū),丟失未提交的更改。git reset HEAD~2
會將分支指針移動到指定提交之前的位置,重置暫存區(qū)但保留工作區(qū)的修改,保留未提交的更改。
還原某文件的特定版本:git checkout <commit> -- <file>
,將<commit>
替換為目標版本的提交標識符或引用名,并將 替換為要還原的文件的路徑和名稱。例如,要將某個文件 myfile.txt 還原到提交標識符為 abcd1234 的版本,可以運行 git checkout abcd1234 – myfile.txt。
注:在切換分支或檢出提交時,請確保將當前工作區(qū)中的更改保存、添加或提交。否則,可能會丟失未保存的更改。
git rm
git rm
是用于刪除文件和目錄的 Git 命令。它可以刪除已跟蹤的文件,并將刪除操作記錄在 Git 的提交歷史中。你還可以使用不同的選項來保留文件或目錄在工作區(qū)中,或刪除目錄及其所有內(nèi)容。
常用的參數(shù)及其詳解
git rm file.txt
:刪除一個已跟蹤的文件。執(zhí)行此命令后,Git 會從工作區(qū)和暫存區(qū)中刪除該文件,并將刪除操作記錄在 Git 的提交歷史中。該文件將不再出現(xiàn)在未來的提交中。
git rm --cached file.txt
:移除一個已跟蹤的文件,但保留在工作區(qū)中。執(zhí)行此命令后,Git 會從暫存區(qū)中刪除該文件,但會保留在工作區(qū)中。這意味著文件將不再被 Git 跟蹤,但不會被物理刪除。
git rm -r directory/
:刪除一個目錄及其所有內(nèi)容。執(zhí)行此命令后,Git 會從工作區(qū)和暫存區(qū)中刪除目錄及其所有內(nèi)容,并將刪除操作記錄在 Git 的提交歷史中。
git rm --cached -r directory/
:移除一個已跟蹤的目錄,但保留在工作區(qū)中。執(zhí)行此命令后,Git 會從暫存區(qū)中刪除目錄及其所有內(nèi)容,但會保留在工作區(qū)中。這意味著目錄將不再被 Git 跟蹤,但不會被物理刪除。
git rm readme.txt
和rm readme.txt 后跟 git add
的區(qū)別如下:
git rm readme.txt
:這是 Git 提供的刪除文件的方法。執(zhí)行 git rm readme.txt 命令會將文件 “readme.txt” 從 Git 的版本控制中刪除,并將刪除操作記錄在 Git 的提交歷史中。
刪除的文件將從工作區(qū)和暫存區(qū)中移除,不再被 Git 跟蹤。
你可以直接執(zhí)行 git commit 來提交這個刪除操作,將其記錄在 Git 的提交歷史中。rm readme.txt 后跟 git add
:rm readme.txt 是操作系統(tǒng)的命令,它只是簡單地從文件系統(tǒng)中刪除了 “readme.txt” 文件,而不涉及 Git。
如果在刪除文件后執(zhí)行 git add readme.txt,Git 會將這個已刪除的文件添加到暫存區(qū)。這意味著 Git 認為這是一個新的文件,并準備將其包含在下一次提交中。
在執(zhí)行完 git add 后,你還需要執(zhí)行 git commit 來記錄這個新文件的添加操作。綜上所述
git rm
是 Git 提供的用于刪除文件的命令,將刪除操作記錄在 Git 的提交歷史中。rm
是操作系統(tǒng)的命令,只是簡單地從文件系統(tǒng)中刪除文件。git add
用于將被刪除的文件添加到暫存區(qū),
注:先rm
文件,然后使用git rm <file>
和git add<file>
效果是一樣的。
git remote
git remote
是一個用于管理遠程倉庫的 Git 命令。它用于查看、添加、重命名或刪除與你的本地倉庫相關聯(lián)的遠程倉庫。
常用的參數(shù)及其詳解
git remote
:查看當前本地倉庫關聯(lián)的所有遠程倉庫的名稱。
git remote -v
:以詳細模式查看當前本地倉庫關聯(lián)的所有遠程倉庫,包括它們的 URL。
git remote add <name> <url>
:添加一個新的遠程倉庫。使用指定的名稱和 URL 將一個遠程倉庫與你的本地倉庫關聯(lián)起來。
git remote add origin git@github.com:vvd/vvd.git
上述將一個名為 “origin” 的遠程倉庫與你的本地倉庫關聯(lián)起來
git remote add
是一個 Git 命令,用于添加一個新的遠程倉庫。
origin
是這個遠程倉庫的名稱,它可以是任何合法的字符串,通常用于表示主要的遠程倉庫。
git@github.com
是遠程倉庫的地址,這里使用的是 SSH 協(xié)議。
vvd/vvd.git
是遠程倉庫的路徑,表示應該關聯(lián)的遠程倉庫是 GitHub 上的 vvd/vvd.git 倉庫。
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
git remote rename <old-name> <new-name>
:將一個已存在的遠程倉庫重命名。
git remote remove <name> 或 git remote rm <name>
:移除本地倉庫與指定名稱的遠程倉庫之間的關聯(lián)。
git remote set-url <name> <new-url>
:修改一個遠程倉庫的 URL。
git remote show <name>
:查看指定遠程倉庫的詳細信息,包括它的 URL 和與之相關聯(lián)的分支。
git remote prune <name>
:刪除本地已經(jīng)不存在的遠程分支與指定遠程倉庫的關聯(lián)。
多分支切換代碼融合
git checkout -b dev # 新建 dev 分支并將HEAD指向dev
git checkout dev # HEAD切換到已經(jīng)創(chuàng)建的dev分支上
git branch # 查看當前分支 當前分支前面會標一個*號
git merge dev # 將dev分支merge 到當前分支上
git branch -d dev # 刪除 dev 分支
最新版本的Git提供了新的git switch命令來切換分支,這里的切換分支 checkout 可用 switch 命令替換
git switch
git switch
是 Git 2.23 版本引入的命令,用于在不同的分支或提交之間切換。
常用的參數(shù)及其詳解
git switch <branch>
:切換到指定的分支。
git switch -c <branch> 或 git switch --create <branch>
:創(chuàng)建并切換到一個新的分支。并將當前分支的更改合并到新分支
git switch -b <branch>
:創(chuàng)建并切換到一個新的分支。
git switch - 或 git switch --
:切換回上一次所在的分支。
git switch <commit>
:切換到指定的提交,創(chuàng)建一個分離頭指針(detached HEAD)狀態(tài),這意味著不會自動創(chuàng)建新的分支,而是直接切換到指定提交。
git switch --track <remote-branch>
:創(chuàng)建并切換到與指定遠程分支關聯(lián)的本地分支。
git switch --detach
:切換到分離頭指針(detached HEAD)狀態(tài),即不在任何分支上工作。
切換分支或提交時,git switch 會自動更新工作區(qū)以反映目標分支或提交的內(nèi)容。切換分支時會保留當前分支的修改,并將其應用到新分支上(如果可能)。
git checkout -b dev
、git switch -b dev
和git switch -c dev
是在 Git 中創(chuàng)建并切換到一個新分支的命令。
git checkout -b dev
:這是 Git 舊版本中用于創(chuàng)建并切換到新分支的命令。它會創(chuàng)建一個名為 “dev” 的新分支,并將 HEAD(當前活動分支的引用)切換到該新分支。這個命令可以在 Git 的任何版本中使用,包括較新的版本。git switch -b dev
:這是在 Git 2.23 版本中引入的新命令,用于創(chuàng)建并切換到新分支。它的作用與 git checkout -b dev 相同,都是創(chuàng)建名為 “dev” 的新分支并切換到該分支。git switch -b dev 是為了替代舊版本的 git checkout -b dev 的方式,使得分支操作的語義更加直觀和清晰。git switch -c dev
:這也是在 Git 2.23 版本中引入的新命令,用于創(chuàng)建并切換到新分支,與 git switch -b dev 類似。使用 git switch -c dev 時,Git 會將當前分支(如果存在)與新分支的內(nèi)容合并到工作區(qū),然后創(chuàng)建名為 “dev” 的新分支,并將 HEAD 切換到該分支上。總結(jié)來說:
git checkout -b dev
是舊版本中的創(chuàng)建并切換到新分支的命令,適用于任何 Git 版本。git switch -b dev
是新版本中引入的創(chuàng)建并切換到新分支的命令,語義更加清晰和直觀。git switch -c dev
是新版本中引入的創(chuàng)建并切換到新分支的命令,它會將當前分支的更改合并到新分支,適用于需要保留當前分支修改的情況。
git branch
git branch
是用于管理 Git 分支的命令。它可以列出、創(chuàng)建、刪除和重命名分支,以及查看分支的合并情況和最后一次提交信息。通過這個命令,你可以更輕松地進行分支的管理和操作。
常用的參數(shù)及其詳解
git branch
:列出所有本地分支。在分支前面加一個星號 * 的是當前所在的分支。
git branch <branch>
:創(chuàng)建一個新的分支。
git branch -d <branch>
:刪除指定的分支。要求分支已被合并到其他分支。
git branch -D <branch>
:強制刪除指定的分支,即使分支尚未合并。
git branch -m <branch>
:重命名當前分支。
git branch -a
:列出所有本地分支和遠程跟蹤分支。
git branch -v
:顯示每個分支的最后一次提交信息。
git branch --merged
:列出已經(jīng)合并到當前分支的分支。
git branch --no-merged
:列出尚未合并到當前分支的分支。
git branch -r
:查看遠程倉庫的分支。
git branch --set-upstream-to=origin/<branch-name> <branch-name>
:設置本地分支與遠程分支的跟蹤關系。當在本地分支 dev 上執(zhí)行 git pull 或 git push 命令時,Git 會自動將本地分支與遠程分支進行關聯(lián),并根據(jù)需要進行代碼拉取或推送操作。
git checkout -b dev
和git branch dev 后 git checkout dev
都是用于創(chuàng)建并切換到一個名為 “dev” 的新分支,但它們的操作順序和效果略有不同。
git checkout -b dev
: 這個命令是一個合并了兩個步驟的快捷方式。它會創(chuàng)建一個名為 “dev” 的新分支,并切換到該分支。相當于以下兩個命令的組合:
git branch dev
git checkout dev
使用快捷方式 git checkout -b dev 可以在一條命令中完成這兩個操作。這個命令在創(chuàng)建新分支時,會將當前所在分支的內(nèi)容完全復制到新分支。兩種方式最終都會在本地倉庫中創(chuàng)建一個名為 “dev” 的新分支,并將工作區(qū)切換到新分支上。不同之處在于
git checkout -b dev
是一個原子操作,將創(chuàng)建分支和切換分支合并為一條命令,而git branch dev 和 git checkout dev
是分開執(zhí)行的。
無論使用哪種方式,最終的結(jié)果都是創(chuàng)建了一個名為 “dev” 的新分支,并將工作區(qū)切換到該分支上,可以在新分支中進行后續(xù)的開發(fā)工作。
git merge
git merge
是 Git 的一個命令,用于合并分支的更改。
合并是將不同的分支上的更改結(jié)合到一起的過程。git merge 命令允許你在 Git 中執(zhí)行合并操作。以下是一些常用用法和選項:
常用的參數(shù)及其詳解
git merge <branch>
:將指定分支 <branch>
的更改合并到當前所在的分支。
git merge --no-ff <branch>
:使用非快進合并模式將分支 <branch>
的更改合并到當前分支。這將創(chuàng)建一個新的合并提交,即使合并是快進合并也是如此。
git merge --squash <branch>
:將分支 <branch>
的更改合并到當前分支,但是將合并提交壓縮為單個提交。這樣可以避免歷史記錄中出現(xiàn)過多的合并提交。
git merge --abort
:如果合并過程中遇到?jīng)_突或問題,可以使用該命令中止合并操作并恢復到合并前的狀態(tài)。
注:在執(zhí)行
git merge <branch>
命令時,Git 會嘗試將指定分支<branch>
的更改應用到當前分支。這可能會導致三種情況:
- 快進合并(Fast-forward merge):如果當前分支的提交歷史中沒有新增的提交,Git 可以直接將當前分支指向指定分支的最新提交。這種情況下,Git 會簡單地將當前分支更新到指定分支的最新狀態(tài)。
- 自動合并(Automatic merge):如果當前分支和指定分支之間有共同的祖先,但是有不同的更改,Git 將嘗試自動合并這些更改。如果合并過程中沒有沖突,Git 會創(chuàng)建一個新的合并提交,并將當前分支更新到合并之后的狀態(tài)。
- 沖突合并(Merge conflict):如果當前分支和指定分支之間有不同的更改并且無法自動合并,Git 將產(chǎn)生合并沖突。在這種情況下,你需要手動解決沖突,編輯文件以解決沖突并標記為已解決后,再提交合并結(jié)果。
git cherry-pick
git cherry-pick
復制一個特定的提交到當前分支,它會將指定的提交復制到當前所在的分支中,并創(chuàng)建一個新的提交。
注:如果在應用提交的過程中遇到?jīng)_突,需要手動解決沖突,并通過
git add
命令將解決后的文件標記為已解決,最后要通過git cherry-pick --continue
命令完成cherry-pick
操作。
常用的參數(shù)及其詳解
git cherry-pick -e
或 --edit
:生成新提交前,允許編輯提交信息。
git cherry-pick -n
或 --no-commit
:只應用提交的更改,不自動生成新的提交。這樣可以將多個提交的更改合并成一個提交。
git cherry-pick -x
或 --signoff
:在生成新提交時自動添加「Signed-off-by」行。
git cherry-pick -s
或 --strategy
:指定應用差異的合并策略。
暫存
git stash # 暫存當前分支下未提交的內(nèi)容
git stash list # 查看當前分支下暫存的信息
git stash apply # 恢復暫存的內(nèi)容 但不刪暫存信息
git stash drop # 刪除暫存信息
git stash pop # 彈出暫存內(nèi)容, 即恢復暫存內(nèi)容后刪暫存信息