【Hexo搭建獨(dú)立博客全紀(jì)錄】(一)使用Git和Github


tags: Hexo;Git;Github
categories: 前端工具
歡迎點(diǎn)擊我的博客原文


從開始著手搭建博客,完整的學(xué)習(xí)Git,Markdown語法,到用Hexo搭建博客成功,再到后期在原有主題的基礎(chǔ)增加功能性和視覺上的優(yōu)化,折騰了三四天,總算看倒騰出了一個看上去基本滿意的博客。由于時間關(guān)系,還有很多想法沒有實現(xiàn),后面會不斷地改進(jìn)和優(yōu)化。今天先來說一說學(xué)習(xí)使用Git和Github。

去年十月第一次接觸Github,慕名而來,當(dāng)時覺得這是一個高的觸不可及的平臺,我等渣渣還是退下吧...直到今年過完年回來二月份才開始真正使用Github,不熟悉命令行的我對Git Bush是繞著走的,在慕課網(wǎng)上看到Github可以使用友好的圖形化客戶端來操作,心中一陣竊喜?,F(xiàn)在看來,當(dāng)時真是too young too simple,因為命令行真的是好用?。《乙稽c(diǎn)都不難,so easy~當(dāng)初用客戶端還把自己搞得暈暈乎乎的,當(dāng)時在想這東西這么復(fù)雜怎么還這么火,還懷疑自己是不是不適合做程序員...本以為自己走了捷徑,卻害苦了自己!好了,閑話到此為止,進(jìn)入正題。

結(jié)論:拒絕客戶端,直接學(xué)習(xí)Git!

學(xué)習(xí)Git和Github,我主要是跟著Git使用教程來做的,文中每一步都有圖和解釋,超詳細(xì),手把手教你使用Git和Github,極力推薦給正在入門的小白!參考該教程、文后的鏈接和我自己的理解,構(gòu)成本文的內(nèi)容。由于目前個人用不到多人協(xié)作,因此本文并未提及,如有需要,也請參考Git使用教程。

此處列出了一些我收藏的公認(rèn)的比較好的Git教程,可以作為深入學(xué)習(xí)資料

Git簡介

Git是什么?

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。

SVN(集中式)與Git(分布式)的最主要的區(qū)別?

SVN是集中式版本控制系統(tǒng),版本庫集中放在中央服務(wù)器。干活的時候用自己的電腦,首先要從中央服務(wù)器哪里得到最新的版本,然后干活,干完后把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)還可以,帶寬夠大,速度夠快,如果在互聯(lián)網(wǎng)下,如果網(wǎng)速慢的話,就難辦了。

Git是分布式版本控制系統(tǒng),沒有中央服務(wù)器。每個人的電腦就是一個完整的版本庫,工作的時候不需要聯(lián)網(wǎng)。既然每個人的電腦都有一個完整的版本庫,那多個人如何協(xié)作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們倆只需把各自的修改推送給對方,就可以互相看到對方的修改了。

安裝Git(windows)

安裝

建議到Git官網(wǎng)下載最新版本,國內(nèi)訪問會很慢,可以到網(wǎng)上搜索下載,然后默認(rèn)安裝即可。安裝完成后,在開始菜單里面找到 "Git --> Git Bash",如下:

彈出一個類似的命令窗口的東西,就說明Git安裝成功。如下:


設(shè)置用戶名和郵箱

因為Git是分布式版本控制系統(tǒng),所以需要填寫用戶名和郵箱作為一個標(biāo)識。在命令行輸入如下:


注意!git config --global 參數(shù),表示你這臺機(jī)器上所有的Git倉庫都會使用這個配置,當(dāng)然你也可以對某個倉庫指定的不同的用戶名和郵箱。

查看已設(shè)置的用戶名和郵箱,在命令行輸入如下:

使用Git

創(chuàng)建版本庫repository

版本庫:又名倉庫,英文名repository??珊唵蔚睦斫庖粋€目錄,這個目錄里面的所有文件都會被Git管理,每個文件的修改,刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻還可以將文件“還原”。

命令 釋義
打開所在目錄
cd folder 打開文件夾
mkdir folder 新建文件夾
pwd 顯示當(dāng)前目錄
初始化:將當(dāng)前目錄變?yōu)間it倉庫
git init 當(dāng)前目錄→git可管理倉庫
添加文件到版本庫
git add file 將file文件添加到暫存區(qū)
git commit -m "提交說明" 將暫存區(qū)中所有文件提交到倉庫
git status 查看當(dāng)前目錄中是否有文件未提交

打開所在目錄

創(chuàng)建一個版本庫,如在D:/www下 目錄下新建一個testgit版本庫,在命令行輸入如下:


初始化:將當(dāng)前目錄變?yōu)間it倉庫

注意! 這時當(dāng)前testgit目錄下會多一個.git的目錄,這個目錄是Git來跟蹤管理版本的,千萬不要手動亂改這個目錄里面的文件,否則,會把git倉庫給破壞了。如下:

添加文件到版本庫

作為測試,在當(dāng)前目錄下新建一個readme.txt,并寫入11111111保存,之后進(jìn)行如下3步操作:


git status 結(jié)果顯示沒有任何文件未提交。

修改和版本回退

命令 釋義
修改文件內(nèi)容
git diff file 查看file文件修改內(nèi)容
查看歷史記錄
git log 查看歷史記錄
git log --pretty=oneline 查看歷史記錄(簡潔版)
版本回退
git reset --hard HEAD^ 退回到上個版本
git reset --hard HEAD^^ 退回到上上個版本
git reset --hard HEAD~100 退回到前100個版本
恢復(fù)最新版本
git reflog 獲取全部版本號
git reset --hard 版本號 退回到版本號的版本
cat file 查看文件內(nèi)容

修改文件內(nèi)容

繼續(xù),修改readme.txt內(nèi)容,在下面添加一行22222222內(nèi)容,繼續(xù)使用git status查看結(jié)果,如下:


結(jié)果顯示,readme.txt文件已被修改,但是未被提交的修改。接下來我想看下readme.txt文件到底改了什么內(nèi)容,如何查看呢?可以使用如下命令:


結(jié)果顯示,readme.txt文件內(nèi)容從一行11111111改成兩行,添加了一行22222222內(nèi)容。

知道了對readme.txt文件做了什么修改后,我們可以放心的提交到倉庫了,提交修改和提交文件是一樣的兩步(第一步是git add 第二步是:git commit)。如下:


git status:提交文件之前,查看一下狀態(tài);提交文件之后,繼續(xù)查看一下狀態(tài),顯示沒有可提交的文件

說明: 所有的版本控制系統(tǒng),只能跟蹤文本文件的改動(如txt文件,網(wǎng)頁,所有程序的代碼等)。對于圖片,視頻這些二進(jìn)制文件,只能把每次改動串起來,無法跟蹤文件的變化,即:知道圖片從1kb變成2kb,但是到底改了什么,版本控制系統(tǒng)也不知道

查看歷史記錄

繼續(xù)對readme.txt文件進(jìn)行修改,再增加一行
內(nèi)容為33333333,然后執(zhí)行命令如下:


現(xiàn)在我已經(jīng)對readme.txt文件做了三次修改了,那么我現(xiàn)在想查看下歷史記錄,如何查看呢?使用命令 git log ,如下:

結(jié)果顯示,從最近到最遠(yuǎn)的顯示日志,我們可以看到最近三次提交,最近的一次是“增加333內(nèi)容”,上一次是“增加222內(nèi)容”。

如果嫌上面顯示的信息太多的話,可以用縮減版顯示,如下:


版本回退

現(xiàn)在我想使用版本回退操作,我想把當(dāng)前的版本回退到上一個版本,要使用什么命令呢?可以使用如下2種命令,第一種是git reset --hard HEAD^ ;那么如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^, 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可。未回退之前的readme.txt內(nèi)容如下:

回退到上一個版本,如下


查看現(xiàn)在readme.txt文件中的內(nèi)容,如下:


結(jié)果顯示,"增加333內(nèi)容"我們沒有看到了。

恢復(fù)最新版本

現(xiàn)在我想恢復(fù)到最新的版本(有333333內(nèi)容版本)要如何恢復(fù)呢?可以通過版本號回退。

但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次git bush,或者333內(nèi)容的版本號我并不知道呢?要如何知道增加3333內(nèi)容的版本號呢?如下:


結(jié)果顯示,"增加333內(nèi)容"的版本號是 c83a6bb?,F(xiàn)在可以通過版本號回退了,如下:


2017-04-28_220020.png

結(jié)果顯示,目前已經(jīng)是最新的版本。

理解工作區(qū)、暫存區(qū)、版本庫

工作區(qū): 你在電腦上看到的目錄,比如目錄testgit里的文件(.git隱藏目錄版本庫除外),以后需要再新建的目錄文件等等都屬于工作區(qū)范疇。

版本庫: 工作區(qū)里的隱藏目錄.git,這個不屬于工作區(qū),這是版本庫。版本庫中存了很多東西:

  • 暫存區(qū)(stage) ——最重要?。〞捍鎱^(qū)是版本庫的一部分)
  • Git為我們自動創(chuàng)建了第一個分支master
  • 指向當(dāng)前分支的指針HEAD

前面說過使用Git提交文件到版本庫有兩步:

  • 第一步:git add 把文件添加進(jìn)去,實際上就是把文件添加到暫存區(qū);

  • 第二步:git commit 提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上。

下面來舉例說明。

在readme.txt再添加一行內(nèi)容為4444444,接著在目錄下新建一個文件為test.txt 內(nèi)容為test,我們先用命令git status來查看下狀態(tài),如下:

先使用git add 命令把2個文件都添加到暫存區(qū)中,再使用git status來查看下狀態(tài),如下:


接著使用git commit一次性提交到分支上,如下:


撤銷修改、刪除和恢復(fù)文件

命令 釋義 備注
撤銷修改
git checkout -- file 丟棄file文件在工作區(qū)的修改(工作區(qū)-暫存區(qū)-版本庫,回到上一階段的修改)a.工作區(qū)修改后沒有add到暫存區(qū):回到和版本庫一樣的狀態(tài);b.工作區(qū)修改后add到暫存區(qū)后又有修改:回到添加暫存區(qū)后的狀態(tài) 如果沒有--,則為創(chuàng)建分支命令
刪除和恢復(fù)文件
rm file 刪除工作區(qū)中的file文件 a.想要刪除版本庫中的file文件:直接commit掉;b.想要從版本庫中刪除file文件:git checkout -- file
git checkout -- file 丟棄file文件在工作區(qū)的修改(工作區(qū)-暫存區(qū)-版本庫,回到上一階段的修改)a.工作區(qū)修改后沒有add到暫存區(qū):回到和版本庫一樣的狀態(tài);b.工作區(qū)修改后add到暫存區(qū)后又有修改:回到添加暫存區(qū)后的狀態(tài) 如果沒有--,則為創(chuàng)建分支命令

撤銷修改

現(xiàn)在在readme.txt文件里面增加一行內(nèi)容為55555555,通過命令查看如下:


在未提交之前,我發(fā)現(xiàn)添加55555555內(nèi)容有誤,得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下幾種方法可以做修改:

  1. 如果知道要刪掉哪些內(nèi)容,直接手動更改去掉那些需要的文件,然后add添加到暫存區(qū),最后commit。

  2. 按以前的方法直接恢復(fù)到上一個版本。使用 git reset --hard HEAD^

但是現(xiàn)在我不想使用以上兩種方法,想直接使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 查看下當(dāng)前的狀態(tài),如下:


可以發(fā)現(xiàn),Git會告訴你,git checkout -- file 可以將工作區(qū)做的修改全部撤銷,如下:

注意: git checkout -- readme.txt 中的 -- 很重要.如果沒有 -- ,則命令變成創(chuàng)建分支了。

結(jié)果顯示,內(nèi)容555已結(jié)沒有了。將工作區(qū)做的修改全部撤銷有兩種情況:

  1. 修改后還沒有放到暫存區(qū):撤銷修改則回到和版本庫一模一樣的狀態(tài);
  2. 已經(jīng)放入暫存區(qū),接著又作了修改:撤銷修改則回到添加暫存區(qū)后的狀態(tài)。

對于第2種情況,繼續(xù)做demo,假如現(xiàn)在對readme.txt添加一行內(nèi)容為66666666,git add 增加到暫存區(qū),如下:


接著添加內(nèi)容77777777,通過撤銷命令讓其回到暫存區(qū)后的狀態(tài)。如下:


刪除和恢復(fù)文件

假如現(xiàn)在版本庫testgit目錄添加一個文件a.txt,然后提交。如下:


一般情況下,刪除文件有兩種方法:

  1. 直接在文件目錄中刪除文件text.txt
  2. 使用命令rm a.txt

如下:


當(dāng)前目錄是這樣的:


如果想徹底從版本庫中刪掉了此文件的話,可以再執(zhí)行commit命令提交掉。沒有commit之前,想在版本庫中恢復(fù)此文件如何操作呢?如下:


再來看testgit目錄,添加了2個文件,如下:


創(chuàng)建、合并分支

理解HEAD和master指針

你已經(jīng)知道,在版本回退里,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。嚴(yán)格來說,HEAD并不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。

結(jié)論:HEAD指向當(dāng)前分支,master指向提交

理解分支管理策略

master主分支:用來發(fā)布新版本,應(yīng)該是非常穩(wěn)定的。一般情況下不允許在上面干活。
一般情況下在新建的dev分支上干活,干完后,要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。

命令 釋義 備注
創(chuàng)建、合并分支
git branch 查看分支 列出所有分支,當(dāng)前分支前有星號
git branch xxx 創(chuàng)建分支xxx
git checkout xxx 切換到分支xxx
git checkout -b xxx 創(chuàng)建 + 切換分支xxx 相當(dāng)于git branch xxxgit checkout xxx
git merge xxx 在主分支上合并xxx分支 "Fast-forward“快進(jìn)模式”:直接把master指向xxx的當(dāng)前提交;刪除分支后,丟掉分支信息CONFLICT:產(chǎn)生沖突;刪除分支后,保留分支信息"
git branch -d xxx 刪除分支xxx
解決沖突
git log --graph --pretty=oneline --abbrev-commit 帶參數(shù)的git log,查看分支合并圖 刪除分支后,保留分支信息
“Fast forward”模式 no-ff
git merge --no-ff -m "merge with no-ff" xxx 合并分支xxx,--no-ff:禁用Fast-forward“快進(jìn)模式” 刪除分支后,保留分支信息

創(chuàng)建、合并分支

首先,我們來創(chuàng)建并切換到dev分支上,然后查看當(dāng)前分支,如下:


git checkout -b xxx表示創(chuàng)建 + 切換分支,相當(dāng)于git branch xxxgit checkout xxx。

git branch表示查看分支,列出所有分支,當(dāng)前分支前有星號。

首先我們來查看下readme.txt內(nèi)容,接著添加內(nèi)容77777777,再次查看內(nèi)容并提交,如下:


dev分支工作已完成,現(xiàn)在切換到主分支master上,繼續(xù)查看readme.txt內(nèi)容,如下:


我們發(fā)現(xiàn)內(nèi)容777不見了,因為已經(jīng)由dev分支切換到主分支了,主分支并沒有增加777內(nèi)容?,F(xiàn)在我們把dev分支上的內(nèi)容合并到分支master上,在master分支上,使用git merge dev,繼續(xù)查看內(nèi)容。如下:

我們發(fā)現(xiàn)多了一條777,和dev分支最新的提交完全一樣。

注意! merge后顯示的Fast-forward信息,表示這次合并是“快進(jìn)模式”,即,直接把master指向dev的當(dāng)前提交,合并速度非??臁?/p>

合并完成后,可以刪除dev分支,如下:


查看分支,發(fā)現(xiàn)只剩下主分支master了。

解決沖突

那么如何解決沖突呢?我們還是一步一步來,先新建一個新分支fenzhi1,在readme.txt添加一行內(nèi)容8888888,然后提交,如下:


接著切換到master分支上,在最后一行添加內(nèi)容99999999,如下:


現(xiàn)在,在master分支上合并fenzhi1,如下:


發(fā)現(xiàn)發(fā)生了沖突CONFLICT,git bush中顯示分支的地方也變成了(master|MERGING)。查看狀態(tài)和readme.txt內(nèi)容,如下:



Git用<<<<<<<,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容。

  • <<<HEAD :主分支修改的內(nèi)容
  • >>>>>fenzhi1 :fenzhi1上修改的內(nèi)容

修改readme.txt內(nèi)容后,保存并提交,如下:



發(fā)現(xiàn)顯示分支的地方變回了(master)。如果想要查看分支合并的情況,需要使用命令 git log命令,如下:

git log展示的信息量太大,一片文字看不過來,使用git log --graph --pretty=oneline --abbrev-commit命令可以顯示分支合并圖,如下:

"Fast forward"模式 no-ff

通常合并分支時,git一般使用"Fast forward"模式,在這種模式下,刪除分支后,會丟掉分支信息。

現(xiàn)在我們來使用帶參數(shù) –no-ff來禁用"Fast forward"模式。來做demo演示下:

  1. 創(chuàng)建一個dev分支
  2. 修改readme.txt內(nèi)容,增加aaa
  3. 添加到暫存區(qū)
  4. 切換回主分支(master)
  5. 合并dev分支,使用命令 git merge -–no-ff -m “注釋” dev
  6. 刪除dev分支
  7. 查看分支
  8. 查看歷史記錄

如下:


bug分支

命令 b釋義
git stash 隱藏當(dāng)前分支的工作現(xiàn)場
git stash list 查看stash隱藏的內(nèi)容
git stash apply 恢復(fù)stash隱藏內(nèi)容
git stash drop 刪除stash內(nèi)容
git stash pop 恢復(fù)并刪除stash隱藏內(nèi)容

在開發(fā)中,會經(jīng)常碰到bug問題,那么有了bug就需要修復(fù),在Git中,分支是很強(qiáng)大的,每個bug都可以通過一個臨時分支來修復(fù),修復(fù)完成后,合并分支,然后將臨時的分支刪除掉。

來做demo演示:新建dev分支,在readme.txt中增加bbb。此時接到一個404 bug,我們可以創(chuàng)建一個404分支來修復(fù)它,但是,當(dāng)前的dev分支上的工作還沒有提交。如下:


并不是我不想提交,而是工作進(jìn)行到一半時候,我們還無法提交,比如我這個分支bug要2天完成,但是我issue-404 bug需要5個小時內(nèi)完成。怎么辦呢?還好,Git還提供了一個stash功能,可以把當(dāng)前工作現(xiàn)場 ”隱藏起來”,等以后恢復(fù)現(xiàn)場后繼續(xù)工作。如下:


查看狀態(tài)顯示,nothing to commit, working directory clean,說明工作現(xiàn)場已被隱藏。現(xiàn)在可以通過創(chuàng)建issue-404分支來修復(fù)bug了。

首先要確定在哪個分支上修復(fù)bug。假設(shè)我現(xiàn)在要在主分支master上修復(fù),那么要切換到主分支master,然后創(chuàng)建一個臨時分支issue-404,如下:


修復(fù)404bug:將最后一行aaa改為404fixed,然后提交,如下:


修復(fù)完成,切換到master分支上,并完成合并,最后刪除issue-404分支。如下:


現(xiàn)在,可以回到dev分支上干活了。


查看狀態(tài)表明,現(xiàn)在的工作區(qū)是干凈的。那么我們工作現(xiàn)場去哪里呢?我們可以使用命令 git stash list來查看下。如下:


工作現(xiàn)場還在,Git把stash內(nèi)容存在某個地方了,但是需要恢復(fù)一下,可以使用如下2個方法:

  1. git stash apply恢復(fù)?;謴?fù)后,stash內(nèi)容并不刪除,你需要使用命令git stash drop來刪除
  2. 使用git stash pop?;謴?fù)的同時把stash內(nèi)容也刪除了

如下:


這樣就恢復(fù)了之前的工作區(qū),可以繼續(xù)dev分支的工作了。

Github遠(yuǎn)程倉庫

命令 b釋義 備注
創(chuàng)建SSH Key
ssh-keygen -t rsa –C “youremail@example.com 創(chuàng)建SSH Key id_rsa是私鑰,不能泄露出去;id_rsa.pub是公鑰,可以放心地告訴任何人"
Github中添加SSH Key
添加遠(yuǎn)程庫
a.先創(chuàng)建本地git倉庫,再創(chuàng)建github倉庫,兩個倉庫同步
git remote add origin https://github.com/xxx/xxx.git 添加github地址
git push -u origin master 第一次使用時執(zhí)行該命令,將本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,并把將其推送到遠(yuǎn)程"
git push origin master 將本地master分支的最新修改推送到github
b.先創(chuàng)建github倉庫,再從github倉庫
git clone https://github.com/xxx/xxx

先注冊github賬號,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要設(shè)置SSH Key。

創(chuàng)建SSH Key

查看是否已經(jīng)有ssh密鑰:
打開用戶主目錄"C:\Users\Administrator.hp-PC",
看看有沒有.ssh目錄。

  • 如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件。如果有,可以直接跳至下一小節(jié)
  • 如果已經(jīng)有ssh密鑰,想要重新生成ssh密鑰,需要清理原有ssh密鑰:
$ mkdir key_backup
$ cp id_rsa* key_backup
$ rm id_rsa*
  • 如果沒有,打開命令行,輸入命令ssh-keygen -t rsa –C “youremail@example.com”。此處的郵箱地址,你可以輸入自己的郵箱地址。在回車中會提示你輸入一個密碼,這個密碼會在你提交項目時使用,如果為空的話提交項目時則不用輸入。這個設(shè)置是防止別人往你的項目里提交內(nèi)容。

由于我本地此前運(yùn)行過一次,所以本地有,如下所示:


id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。由于之前使用Github客戶端,因此還有g(shù)ithub_rsa和github_rsa.pub兩個文件。known_hosts文件如果沒有暫時不管。

驗證是否連接成功,連接成功顯示Hi baoyuzhang! You've successfully authenticated, but GitHub does not provide shell access.。如下:

Github中添加SSH Key

登錄github,點(diǎn)擊個人頭像打開"settings",再打開"SSH and GPG keys"頁面,然后點(diǎn)擊"New SSH Key",填上任意title,在"Key"文本框里黏貼id_rsa.pub文件的內(nèi)容,點(diǎn)擊 Add Key,你就應(yīng)該可以看到已經(jīng)添加的key。如下:


添加遠(yuǎn)程庫

先創(chuàng)建本地git倉庫,再創(chuàng)建github倉庫,兩個倉庫同步

現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個Git倉庫后,又想在github創(chuàng)建一個Git倉庫,并且希望這兩個倉庫進(jìn)行遠(yuǎn)程同步,這樣github的倉庫可以作為備份,又可以其他人通過該倉庫來協(xié)作。

首先,登錄github上,然后在右上角點(diǎn)擊"+"找到"New repository"創(chuàng)建一個新的倉庫。如下:



在Repository name填入testgit,其他保持默認(rèn)設(shè)置,點(diǎn)擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫:


目前,在GitHub上的這個testgit倉庫還是空的?,F(xiàn)在把已有的本地倉庫testgit與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。


把本地庫的內(nèi)容推送到遠(yuǎn)程,使用 git push命令,實際上是把當(dāng)前分支master推送到遠(yuǎn)程。

由于遠(yuǎn)程庫是空的,我們第一次推送master分支時,加上了 –u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。推送成功后,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了:


從現(xiàn)在起,只要本地作了提交,通過命令git push origin master就可以把本地master分支的最新修改推送到github上了,現(xiàn)在你就擁有了真正的分布式版本庫了。

先創(chuàng)建github倉庫,再從github倉庫克隆

上面我們了解了先有本地庫,后有遠(yuǎn)程庫時候,如何關(guān)聯(lián)遠(yuǎn)程庫。現(xiàn)在我們想,假如遠(yuǎn)程庫有新的內(nèi)容了,我想克隆到本地來 如何克隆呢?

首先,登錄github,創(chuàng)建一個新的倉庫,名字叫testgit2.如下:




現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是使用命令git clone克隆一個本地庫了。如下:



Git常用指令

命令 b釋義 備注
1.創(chuàng)建版本庫repository
打開所在目錄
cd folder 打開文件夾
mkdir folder 新建文件夾
pwd 顯示當(dāng)前目錄
初始化:將當(dāng)前目錄變?yōu)間it倉庫
git init 當(dāng)前目錄→git可管理倉庫
添加文件到版本庫
git add file 將file文件添加到暫存區(qū)
git commit -m "提交說明" 將暫存區(qū)中所有文件提交到倉庫
git status 查看當(dāng)前目錄中是否有文件未提交
2.修改和版本回退
修改文件內(nèi)容
git diff file 查看file文件修改內(nèi)容
查看歷史記錄
git log 查看歷史記錄
git log --pretty=oneline 查看歷史記錄(簡潔版)
版本回退
git reset --hard HEAD^ 退回到上個版本
git reset --hard HEAD^^ 退回到上上個版本
git reset --hard HEAD~100 退回到前100個版本
恢復(fù)最新版本
git reflog 獲取全部版本號
git reset --hard 版本號 退回到版本號的版本
cat file 查看文件內(nèi)容
3.撤銷修改、刪除文件、恢復(fù)文件
撤銷修改
git checkout -- file 丟棄file文件在工作區(qū)的修改(工作區(qū)-暫存區(qū)-版本庫,回到上一階段的修改)a.工作區(qū)修改后沒有add到暫存區(qū):回到和版本庫一樣的狀態(tài);b.工作區(qū)修改后add到暫存區(qū)后又有修改:回到添加暫存區(qū)后的狀態(tài) 如果沒有--,則為創(chuàng)建分支命令
刪除和恢復(fù)文件
rm file 刪除工作區(qū)中的file文件 a.想要刪除版本庫中的file文件:直接commit掉;b.想要從版本庫中刪除file文件:git checkout -- file
git checkout -- file 丟棄file文件在工作區(qū)的修改(工作區(qū)-暫存區(qū)-版本庫,回到上一階段的修改)a.工作區(qū)修改后沒有add到暫存區(qū):回到和版本庫一樣的狀態(tài);b.工作區(qū)修改后add到暫存區(qū)后又有修改:回到添加暫存區(qū)后的狀態(tài) 如果沒有--,則為創(chuàng)建分支命令
4.創(chuàng)建、合并分支
創(chuàng)建、合并分支
git branch 查看分支 列出所有分支,當(dāng)前分支前有星號
git branch xxx 創(chuàng)建分支xxx
git checkout xxx 切換到分支xxx
git checkout -b xxx 創(chuàng)建 + 切換分支xxx 相當(dāng)于git branch xxxgit checkout xxx
git merge xxx 在主分支上合并xxx分支 "Fast-forward“快進(jìn)模式”:直接把master指向xxx的當(dāng)前提交;刪除分支后,丟掉分支信息CONFLICT:產(chǎn)生沖突;刪除分支后,保留分支信息"
git branch -d xxx 刪除分支xxx
解決沖突
git log --graph --pretty=oneline --abbrev-commit 帶參數(shù)的git log,查看分支合并圖 刪除分支后,保留分支信息
“Fast forward”模式 no-ff
git merge --no-ff -m "merge with no-ff" xxx 合并分支xxx,--no-ff:禁用Fast-forward“快進(jìn)模式” 刪除分支后,保留分支信息
5.bug分支
git stash 隱藏當(dāng)前分支的工作現(xiàn)場
git stash list 查看stash隱藏的內(nèi)容
git stash apply 恢復(fù)stash隱藏內(nèi)容
git stash drop 刪除stash內(nèi)容
git stash pop 恢復(fù)并刪除stash隱藏內(nèi)容
6.Github遠(yuǎn)程倉庫
創(chuàng)建SSH Key
ssh-keygen -t rsa –C “youremail@example.com 創(chuàng)建SSH Key id_rsa是私鑰,不能泄露出去;id_rsa.pub是公鑰,可以放心地告訴任何人"
Github中添加SSH Key
添加遠(yuǎn)程庫
a.先創(chuàng)建本地git倉庫,再創(chuàng)建github倉庫,兩個倉庫同步
git remote add origin https://github.com/xxx/xxx.git 添加github地址
git push -u origin master 第一次使用時執(zhí)行該命令,將本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,并把將其推送到遠(yuǎn)程"
git push origin master 將本地master分支的最新修改推送到github
b.先創(chuàng)建github倉庫,再從github倉庫
git clone https://github.com/xxx/xxx
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內(nèi)容