學(xué)習(xí)筆記20170601">【PMP】學(xué)習(xí)筆記20170601
932
2025-04-02
1. git流程圖
clone方式創(chuàng)建本地倉(cāng)庫(kù)流程:
從遠(yuǎn)程倉(cāng)庫(kù)中克隆Git資源作為本地倉(cāng)庫(kù):git clone https://github/git/example。
從本地倉(cāng)庫(kù)中checkout代碼然后進(jìn)行代碼修改:直接修改代碼文件等,該區(qū)稱為工作區(qū)
在提交前先將代碼提交到暫存區(qū): git add -A將所有文件放到緩存區(qū);git add filename1 filename2 ...,將指定文件放到緩存區(qū) 。
提交修改。提交到本地倉(cāng)庫(kù):git commit -m "the first commit",提交所有文件到本地倉(cāng)庫(kù),m參數(shù)必須有,意思是為本次提交添加說(shuō)明信息。也可以和add一樣,只提交某個(gè)文件
在修改完成后,需要和團(tuán)隊(duì)成員共享代碼時(shí),可以將代碼push到遠(yuǎn)程倉(cāng)庫(kù):git push http://xxx/xxx。
當(dāng)其他人也更新了遠(yuǎn)程倉(cāng)庫(kù)的代碼,自己本地還未更新時(shí),需要再?gòu)倪h(yuǎn)程倉(cāng)庫(kù)更新自己的本地倉(cāng)庫(kù),此時(shí)不需要用clone,可以用以下三種方式之一:
git fetch:從遠(yuǎn)程獲取最新版本到本地
git merge:merge遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)
git pull:fetch+merge,從安全角度出發(fā),git fetch比git pull更安全,因?yàn)槲覀兛梢韵缺容^本地與遠(yuǎn)程的區(qū)別后,選擇性的合并
更新本地倉(cāng)庫(kù)后,自己又進(jìn)行了修改,可以再add、commit、push。如此循環(huán)反復(fù)。
創(chuàng)新全新的倉(cāng)庫(kù):
在本地如D:/repository目錄下面,新建一個(gè)repo1的文件夾(倉(cāng)庫(kù)名稱叫做repo1),進(jìn)入該文件夾,打開(kāi)git bash,輸入命令git init,執(zhí)行后可以看到,在項(xiàng)目目錄repo文件夾下多出了一個(gè).git目錄,關(guān)于版本等的所有信息都在這個(gè)目錄里面。
新建文件,編輯,然后git add到緩沖區(qū)
git commit到本地倉(cāng)庫(kù)
git push到遠(yuǎn)程倉(cāng)庫(kù)
遠(yuǎn)程倉(cāng)庫(kù)更新后,pull或者fetch到本地
自己更新后再次add、commit、push
2. 文件的四種狀態(tài):
Untracked: 未跟蹤, 此文件在文件夾中, 但并沒(méi)有加入到git庫(kù), 不參與版本控制. 通過(guò)git add 狀態(tài)變?yōu)镾taged.
Unmodify: 文件已經(jīng)入庫(kù), 未修改, 即版本庫(kù)中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫(kù), 則成為Untracked文件
Modified: 文件已修改, 僅僅是修改, 并沒(méi)有進(jìn)行其他的操作. 這個(gè)文件也有兩個(gè)去處, 通過(guò)git add可進(jìn)入暫存staged狀態(tài), 使用git checkout 則丟棄修改過(guò), 返回到unmodify狀態(tài), 這個(gè)git checkout即從庫(kù)中取出文件, 覆蓋當(dāng)前修改!
Staged: 暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫(kù)中, 這時(shí)庫(kù)中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存, 文件狀態(tài)為Modified
3. 分支的概念
我們每次的提交,Git都把它們串成一條時(shí)間線,這條時(shí)間線就是一個(gè)分支。分支就像科幻電影里面的平行宇宙,如果兩個(gè)平行宇宙互不干擾,那對(duì)現(xiàn)在的你也沒(méi)啥影響。不過(guò),在某個(gè)時(shí)間點(diǎn),兩個(gè)平行宇宙合并了,我們就需要處理一些問(wèn)題了!
git一般會(huì)有一個(gè)master主分支。開(kāi)始的時(shí)候,master分支是一條線,Git用master指向最新的提交,然后用HEAD指向master,就能確定當(dāng)前分支,以及當(dāng)前分支的提交點(diǎn)。每次提交,master分支都會(huì)向前移動(dòng)一步,這樣,隨著你不斷提交,master分支的線也越來(lái)越長(zhǎng)。
當(dāng)我們創(chuàng)建新的分支,例如dev時(shí),Git新建了一個(gè)指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當(dāng)前分支在dev上。
Git創(chuàng)建一個(gè)分支很快,因?yàn)槌嗽黾右粋€(gè)dev指針,更改HEAD的指向,工作區(qū)的文件都沒(méi)有任何變化!不過(guò),從現(xiàn)在開(kāi)始,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后,dev指針往前移動(dòng)一步,而master指針不變。
假如我們?cè)赿ev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡(jiǎn)單的方法,就是直接把master指向dev的當(dāng)前提交,就完成了合并。
合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支。
兩個(gè)分支中編輯的內(nèi)容都是相互獨(dú)立互不干擾的,那么如果在兩個(gè)分支中都對(duì)同一個(gè)文件進(jìn)行編輯,然后再合并,就有可能會(huì)出現(xiàn)沖突。沖突需要手動(dòng)解決。
常見(jiàn)的分支命令:
# 列出所有本地分支 git branch # 列出所有遠(yuǎn)程分支 git branch -r # 列出本地和遠(yuǎn)程所有分支 git branch -a # 新建一個(gè)分支,但依然停留在當(dāng)前分支 git branch [branch-name] # 新建一個(gè)分支,并切換到該分支 git checkout -b [branch] # 合并指定分支到當(dāng)前分支 $ git merge [branch] # 刪除本地分支 $ git branch -d [branch-name] # -d表示強(qiáng)制刪除 # 刪除遠(yuǎn)程分支 $ git branch -dr [remote/branch] $ git push origin --delete [branch-name] # 刪除后還要推送到服務(wù)器 # 更改分支名稱 git branch -M
4. 其他命令
查看filename的修改日志 :git log filename
刪除filename:正確方式如下,如果本地電腦直接delete,只是本地(緩沖區(qū)刪除),本地倉(cāng)庫(kù)仍然存在。
# 正確刪除方式 git rm filename git commit -m "remove" # 如果本地delete刪除,需要先add,再commit git add fileanme git commit fileanme -m "remove"
查看文件狀態(tài):git status filename
5. github使用
5.1 使用https方式推送到github
在github上申請(qǐng)一個(gè)賬號(hào)
右上角點(diǎn)擊加號(hào),有New repository
從上圖可以看到,github的使用有兩種方式,HTTPS和SSH,切換一下,會(huì)發(fā)現(xiàn)下面的示例也會(huì)變化。實(shí)際當(dāng)中兩種方式都可以使用,如果使用https很簡(jiǎn)單,基本不需要配置就可以使用,但是每次提交代碼和下載代碼時(shí)都需要輸入用戶名和密碼。如果使用ssh方式就需要客戶端先生成一個(gè)密鑰對(duì),即一個(gè)公鑰一個(gè)私鑰。然后還需要把公鑰放到github的服務(wù)器上。為了先了解如何使用github,此處我們先講https的方式,此方式不用做任何配置,得到第2步的圖片信息即可進(jìn)入下一步。(ssh最后補(bǔ)充)
其實(shí)第2步的圖片已經(jīng)告訴我們接下來(lái)怎么辦了,如果本地倉(cāng)庫(kù)已經(jīng)建好(沒(méi)建好,可以先git init創(chuàng)建本地倉(cāng)庫(kù)),此時(shí)需要建立本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)的連接,或者說(shuō)是添加新的遠(yuǎn)程倉(cāng)庫(kù):git remote add origin https://github.com/yuanhanly/myrepo.git。add就是創(chuàng)建連接的意思,origin是https://github.com/yuanhanly/myrepo.git的別名,一般都叫origin,也可以改叫別的。后面的地址就是github倉(cāng)庫(kù)的地址。
修改分支的名稱為main(master時(shí)代已經(jīng)過(guò)去了):git branch -M main
推送到遠(yuǎn)程服務(wù)器:git push -u origin main。origin遠(yuǎn)程倉(cāng)庫(kù)主機(jī)名,main分支名稱,此時(shí)不需要寫(xiě)https的地址,用origin代替即可。將本地的main分支推送到origin主機(jī),同時(shí)指定origin為默認(rèn)主機(jī),后面就可以不加任何參數(shù)使用git push了,如果當(dāng)前分支只有一個(gè)追蹤分支,那么主機(jī)名都可以省略。 不帶任何參數(shù)的git push,默認(rèn)只推送當(dāng)前分支,這叫做simple方式。此外,還有一種matching方式,會(huì)推送所有有對(duì)應(yīng)的遠(yuǎn)程分支的本地分支。Git 2.0版本之前,默認(rèn)采用matching方法,現(xiàn)在改為默認(rèn)采用simple方式。
5.2 使用ssh方式推送到github
使用ssh方式,除了第3步需要配置一下,其余步驟基本和https相同,下面講述配置ssh的方法(密鑰的生成與設(shè)置只需要進(jìn)行一次,不必每個(gè)倉(cāng)庫(kù)都設(shè)置):
在git bash下執(zhí)行ssh-keygen -t rsa
執(zhí)行命令完成后,在window本地用戶.ssh目錄C:\Users\用戶名.ssh下面生成如下名稱的公鑰和私鑰:id_rsa是私鑰,id_rsa.pub是公鑰
在github下,點(diǎn)擊+旁邊的按鈕,選擇Settings,然后切換到SSH and GPG keys
點(diǎn)擊New SSH key,隨便定義一個(gè)title,然后把id_rsa.pub中的內(nèi)容復(fù)制,粘到Key下面,點(diǎn)擊Add SSH key按鈕完成配置
git remote add 的地址相應(yīng)修改,如git remote add origin git@github.com:yuanhanly/myrepo.git
5.3 關(guān)于遠(yuǎn)程操作的其他相關(guān)命令
git remote -v:顯示需要讀寫(xiě)遠(yuǎn)程倉(cāng)庫(kù)使用的 Git 保存的簡(jiǎn)寫(xiě)與其對(duì)應(yīng)的 URL,如下圖,origin是遠(yuǎn)程倉(cāng)庫(kù)名稱,后面是url,括號(hào)里面是方法
git remote show origin:查看origin遠(yuǎn)程倉(cāng)庫(kù)
git remote rename oldname newname:修改遠(yuǎn)程倉(cāng)庫(kù)名稱,如origin改成aabb
Git GitHub
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。