目錄
Git的安裝
?Git 配置用戶信息
Git 初始化本地倉庫
Git 工作區、暫存區和版本庫
?Git 跟蹤文件
Git 修改文件
?Git 刪除文件
Git 撤銷本地文件的修改?
Git 取消暫存
Git 跳過暫存區
?Git 版本回退
Git 撤銷提交
Git 設置忽略文件
Git 比較文件差異
Git 代碼托管平臺
Git 本地添加遠程倉庫
Git 克隆/推送代碼
?編輯
?Git 合并沖突
Git 注冊github賬號、操作遠程倉庫
Git 使用SSH協議
Git分支
Git HEAD與分支
Git 分支的管理
Git 合并分支
Git 合并分支沖突
Git 儲藏(git stash)
Git 遠程分支_本地分支區別?編輯
Git 創建遠程倉庫的分支
Git 刪除遠程分支
Git 標簽概念
Git 標簽的管理
Git 標簽_推送、檢出
Git
是一個開源的分布式版本控制系統,可以有效、高速地處理項目版本管理。
? ? ? ? 版本控制:一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。
? ? ? ? 分布式:每個人的開發機上都有獨立的版本庫,開發者可以在自己的開發機管理代碼版本。
Git的安裝
Git官網:https://git-scm.com/?
? ? ? ? 1.在Win上安裝:下載二進制安裝包,然后直接安裝,一直下一步直到安裝完成。?
? ? ? ? 2.在Mac上安裝:下載二進制安裝包,然后直接安裝,一直下一步直到安裝完成。?
?
查看是否安裝成功:
?Git 配置用戶信息
配置用戶信息:
$ git config --global user.name xxx
$ git config --global user.email xxxx.com
傳遞--global 選項則 Git 讀寫~/.gitconfig文件。
?檢查配置的用戶信息:
$ git config --list
Git 初始化本地倉庫
在工作區目錄輸入以下命令:
git init
Git 工作區、暫存區和版本庫
-
工作區(Workspace):放項目代碼的地方,項目代碼對應的文件。
-
暫存區(Index/Stage):也叫索引,是一個文件,保存了下次將提交的文件列表信息。
-
本地倉庫(Repository):就是安全存放數據的位置,這里邊有你提交的所有版本的數據。
Git的工作流程:
- 在工作區中添加、修改文件;
- 添加工作區的更改到暫存區;
- 將暫存區域的文件列表信息提交到本地倉庫。
?Git 跟蹤文件
我們首先要確認本地工作區中有項目文件
使用 git status 命令查看文件當前狀態?
可以看到此時沒有東西需要提交,工作tree是干凈的
現在新建一個txt文件
echo hello,world > newfile.txt
現在可以觀察到,該txt文件成功創建,現在我們在使用上述命令,查看狀態:
?現在我們看到有一個”未跟蹤的“文件,我們要將該”未跟蹤”狀態修改為“跟蹤”狀態(就是將其放入緩存區,從而git就可以跟工作區、本地倉庫做比對。)
那我們如何實現對文件的跟蹤呢?
? ? ? ? 使用 git add 要跟蹤的文件?這個命令就可以啦!
現在我們再打開git bash,使用上述命令:
我們可以看到,有to be committed 的標記,表示以放置緩存區,待提交狀態
現在我們再來提交這個文件,使用 git commit -m '提交信息' 這個命令
其中,-m 表示對這個提交文件的作的注釋 后面單引號中的內容就是注釋內容
使用命令后可以看到,當再次觀察狀態時,又恢復了初始的樣子,clean表示已提交狀態
Git 修改文件
現在我們需要實現修改工作區中的文件,可以有多種方法,我們可以在bash外直接打開文件修改內容,或者在bash中使用 vim命令對文件進行修改,我這里使用vim對文件進行修改,依舊是前文中新建的文件作為例子:
?
可以看到我在文件中添加了“hello,git!”的內容,現在我們再使用 git status查看文件狀態:
?出現了上述內容,一個待提交的,有修改動作的的未緩存文件(
not staged
:本地修改未添加至緩存區),好的,現在用我們之前學的內容,提交該文件至緩存區
然后再提交到本地倉庫:
注意:
git commit --amend
增補提交,會使用與當前提交節點相同的父節點進行一次新的提交,舊的提交將會被取消。
?接著我們來查看提交記錄,使用 git log命令來實現
提示:使用
git log --oneline
可以讓每次的提交信息顯示在一行
?Git 刪除文件
對于刪除文件,可以直接在外部對文件右鍵刪除,或者在bash中,使用 rm 要刪除的文件 該命令
?我們可以觀察到,當刪除文件后再查看狀態,此時會有delete信息的提示,接著將其添加至緩存區并且提交。
我們還有一個命令,就是 git rm 文件,該命令不僅從工作區刪除文件并且緩存區的也被刪除。?
Git 撤銷本地文件的修改?
如果我們對文件進行了修改操作,但是發現,還是原版的好,想要找回之間的內容,這時,我們可以使用git中的撤銷操作,
? ? ? ? git restore file?把文件從暫存區域復制到工作目錄,用來丟棄本地修改?
這里我們先新建了a.txt文件,接下來使用vim在文件中進行一些修改?接下來我們使用撤銷命令,
可以看到成功實現了撤銷操作。與此命令類似,還有一種命令:
git checkout -- file?把文件從暫存區域復制到工作目錄,用來丟棄本地修改,這里不再演示。
提示:checkout的功能很多,從?
Git 2.23
?版本開始引入了兩個新的命令:?git switch
?用來切換分支,git restore
用來還原工作區的文件。提示:從暫存區恢復工作區數據的前提是,暫存區有對應數據。
Git 取消暫存
????????git restore --staged file?恢復暫存區,也就是丟棄add
到暫存區的狀態,是將內容從本地倉庫恢復到暫存區。
????????git reset -- file?恢復暫存區,也就是丟棄add
到暫存區的狀態,是將內容從本地倉庫恢復到暫存區。????????
注意:以上恢復暫存區的操作不影響工作區。
Git 跳過暫存區
這里的跳過暫存區不是不使用暫存區的意思,而是將暫存和提交兩個動作合在一體實現,從而跳過git add步驟
git commit aa.txt -m '提交信息' //提交aa.txt
git commit -a -m '提交信息' //提交當前目錄下所有跟蹤的文件
注意:使用
-a
跳過git add步驟的前提是這些待提交的數據,是已跟蹤過的。-a
不會自動將未跟蹤文件變為已跟蹤。
?Git 版本回退
版本回退就是將暫存區回退到指定版本,并且刪除之前的所有提交信息,我們可以通過
? ? ? ? git reset [回退版本] 該命令實現
這里的[回退版本]我們有兩種對象使用,一種是commit標識串,還有一種就是HEAD
如果使用commit
回退版本可以用commit標識中的前幾位符號表示,如回退到圖中時間更早的版本,就可以這么來寫,git reset 9541
如果使用HEAD,HEAD表示指向當前分支(后面會講),當前分支指向最新的提交
git reset HEAD
git reset HEAD^ 回退到上一個版本
git reset HEAD1 回退到上一個版本
HEAD 說明:
- HEAD 表示當前版本
- HEAD^ 上一個版本
- HEAD^^ 上上一個版本
- HEAD^^^ 上上上一個版本
- 以此類推...
可以使用 ~數字表示
- HEAD~0 表示當前版本
- HEAD~1 上一個版本
- HEAD~2 上上一個版本
- 以此類推...
還有一種功能,就是數撤銷工作區中所有未提交的修改內容,將暫存區與工作區都回到上一次版本,并刪除之前的所有信息提交。對于這種,我們可以通過:
? ? ? ? git reset --hard HEAD 來實現? ? ? ??
Git 撤銷提交
有時候我們提交了文件,但是后來發現,這個最新提交有些問題,需要撤回并且重新提交,對于這種問題,我們可以使用:
? ? ? ? git revert HEAD 來實現撤銷提交,HEAD表示撤銷最新的提交,HEAD^或者HEAD1表示撤回前一次提交。
對于這個命令,還可以添加參數-n,表示撤銷最新提交,但執行命令后不進入編輯界面,也就是不會自動幫你提交文件,需要手動提交。
? ? ? ? git revert -n HEAD
Git 設置忽略文件
????????一般我們總會有些文件無需納入 Git 的管理,也不希望它們總出現在未跟蹤文件列表。通常都是些自動生成的文件,比如日志文件,或者編譯過程中創建的臨時文件等。在這種情況下,我們可以創建一個名為?.gitignore
?的文件,列出要忽略的文件模式。
格式規范
- 所有空行或者以注釋符號 # 開頭的行都會被 Git 忽略
- 可以使用標準的 glob 模式匹配
- 匹配模式最后跟斜杠(/)說明要忽略的是目錄
- 要忽略指定模式以外的文件或目錄,可以在模式前加上感嘆號(!)進行取反
glob模式:所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式,匹配規則如下:
"*"
:星號匹配零個或多個任意字符。?
[]
:匹配任何一個列在方括號中的字符,如[ab]匹配a或者匹配b。?
"?"
:問號匹配一個任意字符。?
[n-m]
:匹配所有在這兩個字符范圍內的字符,如[0-9]表示匹配所有0到9的數字。匹配示例:
logs/
:忽略當前路徑下的logs目錄或多級路徑下的logs目錄,包含logs下的所有子目錄和文件。?
/logs.txt
:忽略根目錄下的logs.txt文件。?
*.class
:忽略所有后綴為.class的文件。?
!/classes/a.class
:不忽略classes目錄下的a.class文件。?
tmp/*.txt
:只忽略tmp目錄下的.txt文件。?
**/foo
:可以忽略/foo, a/foo, a/b/foo等。
下面做個實操測試一下忽略文件,先隨便創建一個空文件夾,打開bash,init初始化git倉庫
?然后,再新建一個空文件夾,命名為test,在這個空文件夾中,新建一個.txt文件,我們通過新建設置.gitignore文件來忽略此.txt文件。
現在設置gitignore文件:
打開文件并編輯,按照規范設置忽略哪些文件:
這里表示忽略test文件內所有.txt文件,現在我們在bash中查看git狀態,理論上,應該檢查不到.txt文件了。
可以看到,成功的忽略了目標文件。
Git 比較文件差異
????????有時候我們會把我們的代碼修改后,與最新提交的代碼相比較,對于這種問題,我們可以使用:
????????git diff 這條命令來實現:對比工作區跟暫存區的變化,顯示未暫存的的改動
????????git diff --cached|--staged?對比本地倉庫最新版本跟暫存區的變化,顯示未提交的改動。
????????git diff commit1 commit2?對比本地倉庫中倆個提交版本之間的差異,顯示commit2在commit1基礎上的改動。
Git 代碼托管平臺
目前我們使用到的git命令是都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作, 你就需要將數據放到一臺其他開發人員能夠連接的服務器上,托管在這臺服務器上的數據的就是我們的遠程倉庫。
在使用遠程倉庫之前,我們首先要創建倉庫,創建倉庫有很多種,這里常見的有:自己搭建的Git服務器,安裝如GitLab的Git版本管理系統,或者使用第三方托管平臺(國內的/國外的)。
常用的托管服務平臺(這些代碼托管平臺,都是基于git技術來實現的)
-
GitHub
?(地址:?https://github.com/)是一個面向開源及私有軟件項目的托管平臺,因為只支持Git作 為唯的版本庫格式進行托管,故名GitHub。 -
碼云
(地址:?Gitee - 基于 Git 的代碼托管和研發協作平臺)是國內的一個代碼托管平臺,由于服務器在國內,所以相比于 GitHub,碼云速度會更快。 -
GitLab
?(地址:?https://about.gitlab.com/) 是一個用于倉庫管理系統的開源項目,使用Git作為代 碼管理工具,并在此基礎上搭建起來的web服務。
這里以國內的碼云平臺為例子,注冊并創建遠程倉庫
第一步:打開碼云網址,并注冊https://gitee.com/
第二步:填寫信息,點擊立即注冊:
第三步:注冊成功,登錄后來到主頁
第四步:創建遠程倉庫
?第五步:填寫倉庫信息
第六步:創建遠程倉庫成功
第七步:設置倉庫可見權限
到此為止,在碼云平臺的git遠程倉庫就算創建成功了,后面再講,如何將本地倉庫和遠程倉庫聯系起來。
Git 本地添加遠程倉庫
? ? ? ? 在本地倉庫添加遠程倉庫之前,要事先創建好遠程倉庫。對于本地倉庫,先使用 git init 初始化本地倉庫,初始化完成之后,開始為本地添加遠程倉庫,。可以使用如下命令來實現:
git remote add <shortname> <url>
// shortname:遠程倉庫的簡稱,自定義;
// url:遠程倉庫的地址
提示:可以在.git/config文件中查看遠程倉庫的信息?
對于添加的原車倉庫,我們可以使用git remote 來查看遠程倉庫
如果要刪除遠程倉庫時,可以使用 git remote rm 遠程倉庫名 來實現
【注意:該操作是在本地上移除與遠程倉庫的聯系,并不是將遠程倉庫從平臺上移除】
將遠程倉庫代碼拉取到本地倉庫:git pull <遠程主機名> <遠程分支名>
將本地倉庫代碼推送到遠程倉庫:git push <遠程主機名> <本地分支名>:<遠程分支名>
????????【如果本地分支(branch name 后面會講)與遠程分支名相同,則可以省略冒號】
????????git push <遠程主機名> <本地分支名>
Git 克隆/推送代碼
克隆就是
將遠程倉庫(如GitHub,GitLab上的代碼庫)完整下載到本地,包括代碼,歷史記錄和分支,打個比方就是,就像下載一個游戲的安裝包到你的電腦,之后你可以離線修改游戲內容。
例子:
git clone https://github.com/用戶名/倉庫名.git
推送就是將你本地的代碼修改上傳到遠程倉庫,讓其他人能看到你的改動
git push origin 分支名
首先我們需要知道遠程倉庫地址,然后復制到剪貼板
然后在本地工作目錄中打開git bash,輸入克隆遠程倉庫的命令, git clone 遠程倉庫url
更改本地工作區的文件,并且完成本地的工作流
然后推送本地倉庫到遠程倉庫 git push
Git 拉取:git pull 將遠程倉庫的數據拉取到本地進行合并
? ? ? ? git pull <remote> <branch>
【要直接使用git pull時,要確保設置了跟蹤信息】
我們可以通過在輸入上述命令之后再輸入以下命令,來設置跟蹤信息:
git branch --set-upstream-to=origin/master
Git 抓取(git fetch):將遠程倉房的數據拉取本地,但是不會自動合并
【必須注意?git fetch
?命令會將數據拉取到本地 - 它并不會自動合并或修改本地的工作。 當準備好時可以使用git merge
?手動合并】
git merge orgin/master
?Git 合并沖突
????????Git 合并沖突(Merge Conflict)?? 是指當 Git 無法自動合并不同分支(或同一分支的不同提交)的代碼修改時,需要手動解決沖突的情況。通常發生在多人協作或同時修改同一文件的同一部分代碼時。
為什么會發生沖突???
- ?場景1?:你和同事同時修改了同一個文件的同一行代碼。
- ?場景2?:你刪除了某個文件,而同事修改了該文件。
- ?場景3?:你從遠程拉取代碼(
git pull
)時,遠程分支的修改和你的本地修改沖突。Git 無法自動判斷該保留誰的修改,于是標記為沖突,需要你手動處理。
?沖突的表現:沖突的文件中會包含類似這樣的標記:
<<<<<<< HEAD
你的本地修改
=======
別人提交的修改
>>>>>>> branch-name
<<<<<<< HEAD
?到?=======
?之間是你的代碼。=======
?到?>>>>>>> branch-name
?之間是別人的代碼。
那我們如何去解決這些沖突?
首先,找到沖突文件,運行git status,Git會提示哪些文件有沖突(Unmerged paths)。
然后,手動編輯文件,打開沖突文件,根據需求選擇:
- 保留你的代碼?:刪除別人的代碼和沖突標記(
<<<<<<<
,?=======
,?>>>>>>>
)。 - ?保留別人的代碼?:刪除你的代碼和沖突標記。
- ?合并兩者?:手動調整代碼,保留需要的部分。
接著,標記沖突已解決:將修改后的文件添加進暫存區并提交
git add 沖突文件名
git commit -m "解決合并沖突"
最后,將已經修改后的文件推送到遠程倉庫,git push?
【提示:我們要養成推送之前,先拉取代碼的習慣,防止覆蓋合作者的代碼。】
Git 注冊github賬號、操作遠程倉庫
之前我們操作的是國內的碼云平臺,現在我們來操作國外的github平臺
先打開github網址https://github.com/?點擊注冊【網址由于在國外有可能打不開,需要魔法上網】
填寫信息:
填寫完信息后,點擊驗證:
點擊create account
然后去你填寫的郵箱查看激活碼:
填寫激活碼后,進入github首頁:
接著創建遠程倉庫:
填寫倉庫信息
創建成功
打開工作目錄,克隆遠程倉庫
在本地添加文件,并且提交到本地倉庫
然后推送到遠程倉庫
可以看到推送成功!
Git 使用SSH協議
? ? ?之前本地倉庫跟遠程倉庫數據的傳遞使用的是https協議,需要用戶名跟密碼進行身份驗證。我們還可以使用SSH協議,配置一次,以后每次再傳遞數據就不需要再使用用戶名跟密碼進行認證了。
什么是SSH協議?
? ?SSH為
Secure Shell(安全外殼協議)的縮寫,由IETF的網絡小組(Network Working Group)所制定。SSH是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用SSH協議可以有效防止遠程管理過程中的信息泄露問題。
先在本地生成一對私鑰公鑰:
ssh-keygen -t rsa
?先以碼云平臺設置SSH為例子:
先打開碼云平臺,進入設置:
點擊安全設置里的SSH公鑰
填寫公鑰,點擊確定
填寫當前登錄賬號的密碼進行驗證:
打開倉庫,復制ssh協議的倉庫地址
然后再進行克隆,推送操作。
以上是在國內的代碼暫存平臺,接下來測試GitHub上如何使用SSH。
不管在什么平臺上使用SSH協議都要事先在本地上生成私鑰公鑰,然后配置在平臺上。
首先打開github網址,登錄進入設置區域,如下所示:
在右邊導航欄中找到有SSH標識的區域:
然后新建SSH公鑰:
最后復制SSH協議的地址,進行數據傳遞,拉取,圖送等操作。
Git分支
Git中的分支,起始本質上就是一種指向commit對象的可變指針。Git會默認使用master作為分支
分支在每次提交的時候都會自動向前移動,在進行了若干次提交后,你其實已經有了一個指針指向最后一次提交的對象的分支。
那我們可以在當前分支上再創建一個新的分支嗎?當然可以,可以使用如下的命令實現:
? ? ? ? git branch 新建分支名稱 :這會在當前分支指向的commit對象上新建一個新的分支指針
注意:?Git 中的分支實際上僅是一個包含所指對象校驗和(40 個字符長度 SHA-1 字串)的文件。
我們為什么要使用分支呢?
一般我們的項目會有:
- 生產分支,專門用來上線,這里的代碼必須是經過測試定版的,比較穩定。(一般為master分支)。
- 開發分支,生產分支的平行分支,專門用于后續的開發,或僅用于穩定性測試,一旦進入某種穩定狀態,便可以把它合并到 master 里。(一般為develop分支)
- 功能分支,從develop分支創建,開發人員在這個分支上完成功能模塊代碼,提測的時候合并到develop分支。(名稱一般由這次的開發功能自定義)
工作場景:開發人員在某個功能分支正在編寫代碼,突然接到一個電話說線上有個很嚴重的問題需要緊急修補,這個時候我們面臨的問題:當前的功能代碼不能提交到線上,所以不能在當前分支進行bug修復。
-
返回到原先已經發布到生產服務器上的分支
-
為這次緊急修補建立一個新分支,并在其中修復問題
-
通過測試后,回到生產服務器所在的分支,將修補分支合并進來,然后再推送到生產服務器上
-
切換回之前實現新需求的分支,繼續工作。
Git HEAD與分支
在git中,有一個指向你正在工作中的本地分支的指針,叫做HEAD。如果我們只有一個默認的master分支,則HEAD就會指向master分支。
如果有多個分支,我們切換工作分支時,HEAD指針也會隨之變化,指向我們當前正在工作的分支
那我們如何切換分支呢?
? ? ? ? 我們可以使用 git checkout 分支名稱 這條命令來實現HEAD指向目標分支進行工作
在新分支上工作時,比如在testing分支上進行提交,則HEAD也會隨著分支一起向前移動,如下圖顯示,
我們現在再切換到原來的master分支,HEAD指針也會移動到master分支:
注意:切換分支,除了HEAD指針發生移動之外,工作目錄中的文件也會換成當前分支所指向的commit版本。
Git 分支的管理
新建本地分支:git branch <分支名>
【注意:新建分支之前至少有一個已存在的分支】
查看本地所有分支:git branch
【注意:master分支前的 * 表示當前所在的分支】
查看各個分支最后一個提交對象的信息:git branch -v
切換分支:git checkout <分支名>
【注意:切換分支后,本地工作區的工作內容也會更換】
新建并且切換分支:git checkout -b feature
刪除分支:git branch -d <分支名>
Git 合并分支
我們先創建新的分支,命名為iss53
git checkout -b iss53
然后在新的分支工作區提交內容
git commit -am ''
最后將新分支的提交合并到原來的分支:git merge <被合并的分支>
【注意:要先切換到被合并的分支】
git checkout master
git merge iss53
然后刪除沒有用的分支:
git branch -d iss53
Git 合并分支沖突
Git 合并分支沖突是指當你在嘗試合并兩個分支時,Git 無法自動決定如何合并某些文件的修改,需要你手動介入解決的情況。
那為什么會發生分支合并沖突呢?
沖突通常發生在以下情況:
- ?同一文件的同一部分在兩個分支中都被修改了
- 一個分支刪除了文件,而另一個分支修改了該文件
- 兩個分支對同一文件的同一行做了不同的修改
沖突的本質:Git 的沖突不是錯誤,而是 Git 的一種保護機制
- 當 Git 可以明確知道如何合并時(比如一個分支修改了文件A,另一個分支修改了文件B),它會自動合并
- 當 Git 不確定應該保留哪個修改時(比如兩個分支都修改了文件A的同一行),它會標記為沖突,讓你來決定
沖突的直觀表現為:在代碼文件中,沖突會表現為特殊標記,如下所示:
<<<<<<< HEAD
當前分支的代碼
=======
要合并的分支的代碼
>>>>>>> branch-name
為什么需要解決沖突?
- ?保證代碼正確性?:自動合并可能會產生不符合預期的結果
- ?保持代碼一致性?:需要人工確認合并后的代碼邏輯是否正確
- ?避免引入錯誤?:防止自動合并導致的語法錯誤或邏輯錯誤
現在我制造一個分支合并沖突事件:
先基于master分支,新建開發分支dev,并切換到該分支中
git checkout -b dev
然后使用分支切換代碼,更改本地文件
突然接到新的需求,需要更改線上bug,提交dev分支的本地工作,并且切換到master分支
git checkout master
基于master分支,新建bug修復分支hotfix
git checkout -b hotfix
在hotfix分支,修復bug,修復完成,提交,切換回master分支,將hotfix分支的提交合并到master分支
git checkout master
git merge hotfix
切換回dev分支,繼續工作,工作完成后提交:
git checkout dev
切換回master分支,合并dev分支到master分支
git checkout master
git merge dev
這時候就會產生分支合并沖突
提示:可以使用git status
查閱未合并的沖突
Git 儲藏(git stash)
????????有的時候我們需要從當前正在工作的這個分支,切換到其它分支去解決問題,要切換到其它分支,我們可以先將當前的工作分支的本地修改進行提交,如果說你不想提交,你的代碼并沒有寫完,這個時候我們還可以把當前分支的本地修改暫時儲藏起來,讓它的工作區保持干凈,這樣就可以切換到別的分支了。將來我們還可以把儲藏起來的更改進行恢復,從而繼續之前的工作。
儲藏當前的修改??git stash
再次切換分支,成功
取出之前儲藏的修改,即恢復dev分支的本地工作?git stash apply
?先切換到dev分支
Git 遠程分支_本地分支區別

遠程分支(remote branch
)是對遠程倉庫中的分支的索引。它們是一些無法移動的本地分支,遠程分支就像是書簽,提醒著你上次連接遠程倉庫時上面各分支的位置。
我們用?(遠程倉庫名)/(分支名)
?這樣的形式表示遠程分支。
在本地我們只能移動本地master分支,不能移動遠程分支origin/master。、
例子:先從遠程倉庫克隆項目到本地
在本地master分支修改內容,提交后,本地master分支移動,origin/master分支保持不變。
只有跟服務器通信,遠程分支origin/master分支才會移動,比如其他人往遠程倉庫推送了代碼,則遠程倉庫中,master分支向前移動,我們可以通過?git fetch
?獲取遠程倉庫庫的最新數據。
通過git merge orgin/master
將遠程分支的變更合并到本地master分支。
Git 創建遠程倉庫的分支
創建遠程倉庫的分支有兩種方法,一種是從本地向遠程倉庫推送分支,步驟如下:
? ? ? ? 現在本地新建分支feature_user
? ? ? ? 推送本地分支到遠程倉庫?git push 遠程倉庫名 本地分支名:遠程分支名
git push origin feature_user
//遠程分支名跟本地分支名相同,所以采用簡寫
? ? ? ? 其他協作的小伙伴通過git fetch獲取遠程倉庫的分支
? ? ? ? 通過遠程倉庫分支創建本地分支?git checkout -b 本地分支 遠程分支
git checkout -b feature_user origin/feature_user
提示:通過
git checkout -b 本地分支名 遠程分支名
創建的本地分支會自動跟蹤遠程分支。也可以先在本地新建feature_user分支,然后git fetch
獲取最新數據,再通過git merge origin/feature_user
手動合并到本地分支,但需要手動跟蹤遠程分支。設置跟蹤分支?
git branch --set-upstream-to=origin/develop develop
第二種方法是在遠程倉庫之間新建分支
?
- 通過
git fetch
拉取遠程倉庫最新數據,并獲取遠程分支 - 通過基于遠程分支創建本地分支或者新建本地分支再合并的方式開始開發
Git 刪除遠程分支
當我們的某個分支已經合并到了master分支,并且之后也不會繼續在該分支上進行開發使用,則可以從遠程倉庫把該分支刪除掉,避免雜亂的分支管理。
在托管平臺直接刪除:
?
在本地通過命令刪除?git push 遠程倉庫名 --delete 分支名
【提示:刪除遠程分支,會將本地遠程分支這個指針跟服務器上面的對應分支刪除掉,本地分支不會被刪除】
Git 標簽概念
-
什么是標簽
標簽可以是一個對象(帶注解標簽),也可以是一個簡單的指針(不帶注解標簽),用來標注某次提交對象。
-
如果只是一個簡單的指針,則它就相當于一個不會移動的分支。
-
如果是一個對象,則除了保存指向的提交對象的信息之外,還會保存是誰打的標簽,什么時間,還可以保存注解信息。(推薦使用)
-
-
為什么使用標簽
我們可以為重要的版本(某個里程碑)打上標簽,相當于為這次提交記錄指定一個別名,方便提取文件。比如人們在發布某個軟件版本(比如 v1.0 等等)的時候,經常這么做。
-
標簽跟分支的區別
分支會跟著我們的提交移動,指向最新的提交對象,但是標簽不會移動,它就是指向某個固定的提交對象。
Git 標簽的管理
新建標簽命令:git tag -a 標簽名 -m '標簽說明信息'
-a
?選項意為”創建一個帶注解的標簽”,如果不加-a
則創建的是一個不帶注解的標簽,一個簡單的引用。
-m
?選項則指定了對應的標簽說明默認情況下,新建的標簽指向最新的提交對象。
git tag -a v1.0 -m '發布版本v1.0'
查看相應標簽的版本信息,并連同顯示打標簽時的提交對象:git show 標簽名
git show v1.0
如果我們忘了給某個提交打標簽,又將它發布了,我們可以給它追加標簽。
git tag -a 標簽名 commitId -m '標簽說明信息'
git tag -a v0.1 a29e110 -m '版本v0.1'
列出所有標簽:git tag
刪除標簽:git tag -d 標簽名
Git 標簽_推送、檢出
推送標簽到遠程倉庫:git push 遠程倉庫名 標簽名
git push origin v0.1
通過標簽獲取對應版本(檢出):git checkout -b 本地分支名 標簽名
提示:檢出的前提是你本地已經有了遠程的標簽,如果沒有,使用
git fetch
獲取遠程倉庫最新數據,再執行檢出。