Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

本篇文章給大家?guī)黻P(guān)于git的相關(guān)知識,其中主要介紹了關(guān)于遠(yuǎn)程倉庫的相關(guān)內(nèi)容,git并不像svn那樣有個(gè)中心服務(wù)器,下面看一下使用了github作為遠(yuǎn)程倉庫的一些問題,希望對大家有幫助。

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

推薦學(xué)習(xí):《git

Git 遠(yuǎn)程倉庫(github)

Git 并不像 SVN 那樣有個(gè)中心服務(wù)器。

目前我們使用到的 Git 命令都是在本地執(zhí)行,如果你想通過 Git 分享你的代碼或者與其他開發(fā)人員合作。 你就需要將數(shù)據(jù)放到一臺其他開發(fā)人員能夠連接的服務(wù)器上。

本例使用了 Github 作為遠(yuǎn)程倉庫,你可以先閱讀我們的 Github 簡明教程。

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
遠(yuǎn)程倉庫命令
1、 查看當(dāng)前的遠(yuǎn)程庫
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
2、添加遠(yuǎn)程倉庫
運(yùn)行 git remote add 添加一個(gè)新的遠(yuǎn)程 Git 倉庫, 同時(shí)指定一個(gè)方便使用的簡寫:
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
3、$ git fetch
這個(gè)命令會訪問遠(yuǎn)程倉庫,從中拉取所有你還沒有的數(shù)據(jù)。 執(zhí)行完成后,你將會擁有那個(gè)遠(yuǎn)程倉庫中所有分支的引用,可以隨時(shí)合并或查看。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

origin下所有分支都被復(fù)制
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
git fetch 命令只會將數(shù)據(jù)下載到你的本地倉庫——它并不會自動合并或修改你當(dāng)前的工作。 當(dāng)準(zhǔn)備好時(shí)你必須手動將其合并入你的工作。
git pull 命令來自動抓取后合并該遠(yuǎn)程分支到當(dāng)前分支
默認(rèn)情況下,git clone 命令會自動設(shè)置本地 master 分支跟蹤克隆的遠(yuǎn)程倉庫的 master 分支(或其它名字的默認(rèn)分支)。 運(yùn)行 git pull 通常會從最初克隆的服務(wù)器上抓取數(shù)據(jù)并自動嘗試合并到當(dāng)前所在的分支。
3、git push 推送到遠(yuǎn)程倉庫
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
只有當(dāng)你有所克隆服務(wù)器的寫入權(quán)限,并且之前沒有人推送過時(shí),這條命令才能生效。 當(dāng)你和其他人在同一時(shí)間克隆,他們先推送到上游然后你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先抓取他們的工作并將其合并進(jìn)你的工作后才能推送。
4、查看某個(gè)遠(yuǎn)程倉庫
如果想要查看某一個(gè)遠(yuǎn)程倉庫的更多信息,可以使用 git remote show 命令。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
5、遠(yuǎn)程倉庫的重命名
git remote rename 來修改一個(gè)遠(yuǎn)程倉庫的簡寫名Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
6、遠(yuǎn)程倉庫的移除
git remote remove 或 git remote rm
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
7、打標(biāo)簽:可以給倉庫歷史中的某一個(gè)提交打上標(biāo)簽,以示重要。 比較有代表性的是人們會使用這個(gè)功能來標(biāo)記發(fā)布結(jié)點(diǎn)
1)列出標(biāo)簽
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
2)git tag -l/list 通配符方式列出標(biāo)簽
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
3)輕量標(biāo)簽(lightweight):它只是某個(gè)特定提交的引用,本質(zhì)上將提交校驗(yàn)和存儲到一個(gè)文件中——沒有保存任何其他信息
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

4)附注標(biāo)簽(annotated):存儲在 Git 數(shù)據(jù)庫中的一個(gè)完整對象, 它們是可以被校驗(yàn)的,其中包含打標(biāo)簽者的名字、電子郵件地址、日期時(shí)間, 此外還有一個(gè)標(biāo)簽信息
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
5)后期打標(biāo)簽:針對歷史項(xiàng)目打標(biāo)簽
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
6)共享標(biāo)簽:git push 命令并不會傳送標(biāo)簽到遠(yuǎn)程倉庫服務(wù)器上,可以運(yùn)行 git push origin 。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

git push origin --tags:將會把所有不在遠(yuǎn)程倉庫服務(wù)器上的標(biāo)簽全部傳送到那里。 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/498567ecae294ae9af392a975334650f.png)

7)要刪除掉你本地倉庫上的標(biāo)簽
git tag -d

注意上述命令并不會從任何遠(yuǎn)程倉庫中移除這個(gè)標(biāo)簽,你必須用 git push :refs/tags/ 來更新你的遠(yuǎn)程倉庫:
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

注意上述命令并不會從任何遠(yuǎn)程倉庫中移除這個(gè)標(biāo)簽
必須用第一種變體是 git push :refs/tags/ :

$ git push origin :refs/tags/v1.4-lw
上面這種操作的含義是,將冒號前面的空值推送到遠(yuǎn)程標(biāo)簽名,從而高效地刪除它。
第二種更直觀的刪除遠(yuǎn)程標(biāo)簽的方式是:
$ git push origin –delete
8、git分支管理
注:git branch ,列出當(dāng)前所有分支,分支前的 * 字符:它代表現(xiàn)在檢出的那一個(gè)分支
1)git branch testing 創(chuàng)建testing分支
2) git checkout testing 切換分支, 查看當(dāng)前分支,可以 HEAD 指向即為當(dāng)前所在的分支
【 git checkout -b 創(chuàng)建并切換分支】
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
3)輿情測試+testing分支分別提交,head指針會向前移動
兩分支的基準(zhǔn)都是9623a70fe,分別提交后各自的指針改變

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
運(yùn)行 git log –oneline –decorate –graph –all ,它會輸出你的提交歷史、各個(gè)分支的指向以及項(xiàng)目的分支分叉情況。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
分叉情況:
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
分支合并 git merge【輿情分支不做修改,hotfix分支產(chǎn)生新提交情況】–三方合并
hotfix基于輿情測試分支拉取,于hotfix產(chǎn)生提交,查看hotfix分支的提交id為85bb*,切換回輿情分支,執(zhí)行g(shù)it merge,發(fā)現(xiàn)輿情分支的提交id也推進(jìn)到hotfix分支產(chǎn)生的85bb*
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
輿情分支及hotfix分支變化圖解:
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
分支合并 git merge【輿情分支/Testing分支都產(chǎn)生新提交情況】
Test基于輿情測試分支拉取,Test分支/輿情分支分別修改產(chǎn)生提交,在輿情分支合并hotfix分支內(nèi)容后,切換至Test分支, test分支合并輿情分支時(shí),發(fā)現(xiàn)Testing分支直接產(chǎn)生新的提交id41b1*,而輿情分支中的對應(yīng)的對應(yīng)的d804和85不會id不會合并過來,此刻新id對應(yīng)兩個(gè)父級id,分別是testing的Da4和輿情分支的85b
1)git checkbox Testing
2)git merge 輿情分支
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
4)git branch -v 查看每個(gè)分支的最后一次提交
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
5)git branch –merged/–no-merged 過濾這個(gè)列表中已經(jīng)合并或尚未合并到當(dāng)前分支的分支
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
6)git branch -d
包含了還未合并的工作,嘗試使用 git branch -d 命令刪除它時(shí)會失敗,除非用-D
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
9、遠(yuǎn)程分支
1) git ls-remote 來顯式地獲得遠(yuǎn)程引用的完整列表
通過 git remote show 獲得遠(yuǎn)程分支的更多信息
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
2)origin/master和master區(qū)別

master : 它代表本地的某個(gè)分支名。 origin master 代表著兩個(gè)概念,前面的 origin 代表遠(yuǎn)程名,后面的 master 代表遠(yuǎn)程分支名 origin/master 本地分支,是從遠(yuǎn)程拉取后,在本地建立的一份拷貝【是用來和遠(yuǎn)程分支對應(yīng)的,一般不可見】  舉幾個(gè)例子可能會更加清晰地說明問題: ① 執(zhí)行 git fetch origin master 時(shí),它的意思是從名為 origin 的遠(yuǎn)程上拉取名為 master 的分支到本地分支  origin/master 中。既然是拉取代碼,當(dāng)然需要同時(shí)指定遠(yuǎn)程名與分支名,所以分開寫。  ②執(zhí)行 git merge origin/master 時(shí),它的意思是合并名為 origin/master的分支到當(dāng)前所在分支。既然是分支的合并,當(dāng)然就與遠(yuǎn)程名沒有直接的關(guān)系,所以沒有出現(xiàn)遠(yuǎn)程名。需要指定的是被合并的分支。  ③執(zhí)行 git push origin master 時(shí), 推送本地的 master 分支到遠(yuǎn)程origin,  ④ 一次性拉取多個(gè)分支的代碼:git fetch origin master dev1 dev2  ⑤ 一次性合并多個(gè)分支的代碼:git merge origin/master 分支1 分支2 分支3

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
2)如果遠(yuǎn)程倉庫有人提交內(nèi)容,那么遠(yuǎn)程倉庫就會向前移動,而本地origin/master如果不拉取,將還保持不動,如果希望本地同遠(yuǎn)程保持一致,可以通過git fetch拉取遠(yuǎn)程倉庫數(shù)據(jù),
git fetch
3) git push origin 分支名
推送本地的 輿情測試 分支,將其作為遠(yuǎn)程倉庫的 輿情測試 分支
如果并不想讓遠(yuǎn)程倉庫 上的分支叫做 輿情測試 ,可以運(yùn)行 git push origin 輿情測試 :test0421 來將本地的 輿情測試 分支推送到遠(yuǎn)程倉庫上的 test0421 分支。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
4)checkout 的操作
通過 git checkout test0421 會把分支切換到test0421分支上

這個(gè)操作會處于‘detached Head’ 狀態(tài),在這種狀態(tài)下不會修改origin/test0421上的數(shù)據(jù),可以修改并提交做一些實(shí)驗(yàn)性的操作,但是切換回test0421分支后,再次從test0421切換回origin/test0421時(shí),之前的改變不會同步,因?yàn)閛rigin/test0421 是用戶只讀的Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
5)git push origin –delete 分支名 刪除遠(yuǎn)程倉庫分支【本地倉庫還有數(shù)據(jù)】
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
6)rebase變基:使用 rebase 命令將提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一樣。
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)

首先找到這兩個(gè)分支(即當(dāng)前分支 Test0421、變基操作的目標(biāo)基底分支 Test0420) 的最近共同祖先 85bb,然后對比當(dāng)前分支相對于該祖先的歷次提交,提取相應(yīng)的修改并存為臨時(shí)文件, 然后將當(dāng)前分支指向目標(biāo)基底 3467, 最后以此將之前另存為臨時(shí)文件的修改依序應(yīng)用

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
Test0420 使用git merge 合并Test0421內(nèi)容,結(jié)果兩個(gè)分支完全一致,可以發(fā)現(xiàn)提交記錄沒有出現(xiàn)分拆,而是保持在一條直線上【可以比較前面get merge環(huán)節(jié)中結(jié)果出現(xiàn)分叉】

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
rebase時(shí)一系列提交按照原有次序依次應(yīng)用,只是當(dāng)前分支的提交id值改變

Git遠(yuǎn)程倉庫(Github)知識點(diǎn)總結(jié)
merge時(shí)多次提交合并成一次,生成新的提交id
總結(jié):無論是通過變基,還是通過三方合并,整合的最終結(jié)果所指向的快照始終是一樣的,只不過提交歷史不同罷了。 變基是將一系列提交按照原有次序依次應(yīng)用到另一分支上,而合并是把最終結(jié)果合在一起。

推薦學(xué)習(xí):《git

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享