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 倉(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 工作流程如下:
- 在工作目錄中修改文件。
- 暫存文件,將文件的快照放入暫存區(qū)域。
- 提交更新,找到暫存區(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])
分支
文件的保存

基本操作
分支創(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
開(kāi)發(fā)某個(gè)網(wǎng)站。
為實(shí)現(xiàn)某個(gè)新的需求,創(chuàng)建一個(gè)分支。
在這個(gè)分支上開(kāi)展工作。
正在此時(shí),你突然接到一個(gè)電話說(shuō)有個(gè)很嚴(yán)重的問(wèn)題需要緊急修補(bǔ)。 你將按照如下方式來(lái)處理:
切換到你的線上分支(production branch)。
為這個(gè)緊急任務(wù)新建一個(gè)分支,并在其中修復(fù)它。
在測(cè)試通過(guò)之后,切換回線上分支,然后合并這個(gè)修補(bǔ)分支,最后將改動(dòng)推送到線上分支。
切換回你最初工作的分支上,繼續(xù)工作。
主要用到的就是git branch、checkouts
分支開(kāi)發(fā)工作流
長(zhǎng)期分支

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

變基
整合不同分支有兩種方法: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]