git學(xué)習(xí)

git學(xué)習(xí)

git狀態(tài)

Git 有三種狀態(tài),你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。已提交表示數(shù)據(jù)已經(jīng)安全地保存在本地?cái)?shù)據(jù)庫(kù)中。 已修改表示修改了文件,但還沒(méi)保存到數(shù)據(jù)庫(kù)中。 已暫存表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的快照中。由此引入 Git 項(xiàng)目的三個(gè)工作區(qū)域的概念:Git 倉(cāng)庫(kù)、工作目錄以及暫存區(qū)域。

Git三種狀態(tài).png

Git 倉(cāng)庫(kù)目錄是 Git 用來(lái)保存項(xiàng)目的元數(shù)據(jù)和對(duì)象數(shù)據(jù)庫(kù)的地方。 這是Git 中最重要的部分,從其它計(jì)算機(jī)克隆倉(cāng)庫(kù)時(shí),拷貝的就是這里的數(shù)據(jù)。

工作目錄是對(duì)項(xiàng)目的某個(gè)版本獨(dú)立提取出來(lái)的內(nèi)容。 這些從 Git 倉(cāng)庫(kù)的壓縮數(shù)據(jù)庫(kù)中提取出來(lái)的文件,放在磁盤上供你使用或修改。

暫存區(qū)域是一個(gè)文件,保存了下次將提交的文件列表信息,一般在 Git 倉(cāng)庫(kù)目錄中。 有時(shí)候也被稱作索引,不過(guò)一般說(shuō)法還是叫暫存區(qū)域。

基本的 Git 工作流程如下:

  1. 在工作目錄中修改文件。
  2. 暫存文件,將文件的快照放入暫存區(qū)域。
  3. 提交更新,找到暫存區(qū)域的文件,將快照永久性存儲(chǔ)到 Git 倉(cāng)庫(kù)目錄。

如果 Git 目錄中保存著的特定版本文件,就屬于已提交狀態(tài)。 如果作了修改并已放入暫存區(qū)域,就屬于已暫存狀態(tài)。如果自上次取出后,作了修改但還沒(méi)有放到暫存區(qū)域,就是已修改狀態(tài)。

基本操作命令

初始化倉(cāng)庫(kù):git init
跟蹤文件: git add
克隆倉(cāng)庫(kù): git clone
查看文件狀態(tài):git status
顯示未暫存的變動(dòng): git diff
跳過(guò)暫存區(qū)直接提交: git commit -a
移除文件:git rm
移動(dòng)文件:git mv
查看提交歷史:git log
別名:git config --global alias.別名 原來(lái)名稱

文件.gitignore 的格式規(guī)范如下:

  • 所有空行或者以 # 開(kāi)頭的行都會(huì)被 Git 忽略。
  • 可以使用標(biāo)準(zhǔn)的 glob 模式匹配。
  • 匹配模式可以以(/)開(kāi)頭防止遞歸。
  • 匹配模式可以以(/)結(jié)尾指定目錄。
  • 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(hào)(!)取反。

倉(cāng)庫(kù)

查看遠(yuǎn)程倉(cāng)庫(kù):git remote 更多信息:git remote show
添加遠(yuǎn)程倉(cāng)庫(kù):git remote add < shortname > < url>
從遠(yuǎn)程倉(cāng)庫(kù)拉取:git fetch [remote-name]
推送到遠(yuǎn)程倉(cāng)庫(kù):git push [remote-name] [branch]
遠(yuǎn)程倉(cāng)庫(kù)重命名:git remote rename
遠(yuǎn)程倉(cāng)庫(kù)移除:git remote rm

標(biāo)簽

列出已有的標(biāo)簽:git tag
創(chuàng)建標(biāo)簽:

  • 輕量標(biāo)簽 lightweight
  • 標(biāo)注標(biāo)簽 annotated
    git tag -a 標(biāo)簽的名稱 -m 附加信息
    (標(biāo)簽可以共享,如:git push origin [tagname])

分支

文件的保存

git保存數(shù)據(jù).png

基本操作

分支創(chuàng)建:git branch 分支名稱
切換分支:git checkout 已存在的分支名稱
創(chuàng)建分支并且切換到這個(gè)分支:git checkout -b 分支名稱
查看分支所指向的對(duì)象:git --decorete
查看分叉歷史:git log --oneline --decorate --graph --all
刪除分支:git branch -d 分支名稱
刪除遠(yuǎn)程分支:git push origin --delete 分支名稱
強(qiáng)制刪除:git branch -D
合并分支:git merge 分支名稱
同步分支數(shù)據(jù):git fetch origin

分支創(chuàng)建于合并的簡(jiǎn)單case

  1. 開(kāi)發(fā)某個(gè)網(wǎng)站。

  2. 為實(shí)現(xiàn)某個(gè)新的需求,創(chuàng)建一個(gè)分支。

  3. 在這個(gè)分支上開(kāi)展工作。

正在此時(shí),你突然接到一個(gè)電話說(shuō)有個(gè)很嚴(yán)重的問(wèn)題需要緊急修補(bǔ)。 你將按照如下方式來(lái)處理:

  1. 切換到你的線上分支(production branch)。

  2. 為這個(gè)緊急任務(wù)新建一個(gè)分支,并在其中修復(fù)它。

  3. 在測(cè)試通過(guò)之后,切換回線上分支,然后合并這個(gè)修補(bǔ)分支,最后將改動(dòng)推送到線上分支。

  4. 切換回你最初工作的分支上,繼續(xù)工作。

主要用到的就是git branch、checkouts

分支開(kāi)發(fā)工作流

長(zhǎng)期分支

分支工作流-長(zhǎng)期分支.png

特性分支

特性分支是一種短期分支,它被用來(lái)實(shí)現(xiàn)單一特性或其相關(guān)工作。

分支工作流-特性分支.png

變基

整合不同分支有兩種方法:merge和rebase
變基相當(dāng)于把分支上所做的修改復(fù)制到另一個(gè)分支上,看起來(lái)就像是這個(gè)分支做了這些操作一樣。

使用它要遵守一條準(zhǔn)則:不要對(duì)在你的倉(cāng)庫(kù)外有副本的分支執(zhí)行變基.

變基操作的實(shí)質(zhì)是丟棄一些現(xiàn)有的提交,然后相應(yīng)地新建一些內(nèi)容一樣但實(shí)際上不同的提交。 如果你已經(jīng)將提交推送至某個(gè)倉(cāng)庫(kù),而其他人也已經(jīng)從該倉(cāng)庫(kù)拉取提交并進(jìn)行了后續(xù)工作,此時(shí),如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此將不得不再次將他們手頭的工作與你的提交進(jìn)行整合,如果接下來(lái)你還要拉取并整合他們修改過(guò)的提交,事情就會(huì)變得一團(tuán)糟。

變基操作:git rebase [basebranch] [topicbranch]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容