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教程 - 廖雪峰的官方網(wǎng)站 大牛博客,還包含JS,Python等教程,都很棒
圖解Git 圖文并茂,對git工作原理的理解幫助很大
GitHub Guides GitHub官方指南,很多都有中文翻譯,可以自己搜一下
理解 GitHub Flow · GitHub 指南 理解Github工作原理,GitHub官方指南中文翻譯的一部分
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)在可以通過版本號回退了,如下:
結(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)在我可以有如下幾種方法可以做修改:
如果知道要刪掉哪些內(nèi)容,直接手動更改去掉那些需要的文件,然后add添加到暫存區(qū),最后commit。
按以前的方法直接恢復(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ū)做的修改全部撤銷有兩種情況:
- 修改后還沒有放到暫存區(qū):撤銷修改則回到和版本庫一模一樣的狀態(tài);
- 已經(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,然后提交。如下:
一般情況下,刪除文件有兩種方法:
- 直接在文件目錄中刪除文件text.txt
- 使用命令
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 xxx 和git 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 xxx
和git 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演示下:
- 創(chuàng)建一個dev分支
- 修改readme.txt內(nèi)容,增加aaa
- 添加到暫存區(qū)
- 切換回主分支(master)
- 合并dev分支,使用命令
git merge -–no-ff -m “注釋” dev
- 刪除dev分支
- 查看分支
- 查看歷史記錄
如下:
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個方法:
- git stash apply恢復(fù)?;謴?fù)后,stash內(nèi)容并不刪除,你需要使用命令git stash drop來刪除
- 使用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 xxx 和git 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 |