如何使用git命令上傳本地到github?
本系列教程主要參考github用戶stormzhang,涉及到Github中基本概念,Git速成,向 GitHub 提交代碼,Git 進(jìn)階, 團(tuán)隊(duì)合作利器:Git 分支詳解, GitHub 常見的幾種操作。
如果想快速學(xué)習(xí)使用git命令上傳本地到github可以參考如下博客。
如何用git命令行上傳本地代碼到github

git_learn.jpg
GitHub 基本概念
- Repository
倉庫,即你的項(xiàng)目,你想在GitHub上開源一個(gè)項(xiàng)目,那就必須要新建一個(gè)Repository,如果你開源的項(xiàng)目多了,你就擁有了多個(gè)Repositories。 - Issue
問題,舉個(gè)例子,就是你開源了一個(gè)項(xiàng)目,別人發(fā)現(xiàn)你的項(xiàng)目中有bug,或者哪些地方做的不夠好,他就可以給你提個(gè)Issue,即問題,提的問題多了,也就是Issues,然后你看到了這些問題就可以去逐個(gè)修復(fù),修復(fù)ok了就可以一個(gè)個(gè)Close掉。 - Star
這個(gè)好理解,就是給項(xiàng)目點(diǎn)贊,但是在GitHub上的點(diǎn)贊遠(yuǎn)比微博、知乎點(diǎn)贊難的多,如果你有一個(gè)項(xiàng)目獲得100個(gè)star都算很不容易了! - Fork
這個(gè)不好翻譯,如果實(shí)在要翻譯我把他翻譯成分叉,什么意思呢?你開源了一個(gè)項(xiàng)目,別人想在你這個(gè)項(xiàng)目的基礎(chǔ)上做些改進(jìn),然后應(yīng)用到自己的項(xiàng)目中,這個(gè)時(shí)候他就可以 Fork 你的項(xiàng)目,這個(gè)時(shí)候他的GitHub主頁上就多了一個(gè)項(xiàng)目,只不過這個(gè)項(xiàng)目是基于你的項(xiàng)目基礎(chǔ)(本質(zhì)上是在原有項(xiàng)目的基礎(chǔ)上新建了一個(gè)分支,分支的概念后面會(huì)在講解Git的時(shí)候說到),他就可以隨心所欲的去改進(jìn),但是絲毫不會(huì)影響原有項(xiàng)目的代碼與結(jié)構(gòu)。 - Pull Request
發(fā)起請(qǐng)求,這個(gè)其實(shí)是基于Fork的,還是上面那個(gè)例子,如果別人在你基礎(chǔ)上做了改進(jìn),后來覺得改進(jìn)的很不錯(cuò),應(yīng)該要把這些改進(jìn)讓更多的人收益,于是就想把自己的改進(jìn)合并到原有項(xiàng)目里,這個(gè)時(shí)候他就可以發(fā)起一個(gè)Pull Request(簡稱PR) ,原有項(xiàng)目創(chuàng)建人就可以收到這個(gè)請(qǐng)求,這個(gè)時(shí)候他會(huì)仔細(xì)review你的代碼,并且測試覺得OK了,就會(huì)接受你的PR,這個(gè)時(shí)候你做的改進(jìn)原有項(xiàng)目就會(huì)擁有了。 - Watch
觀察,如果你Watch了某個(gè)項(xiàng)目,那么以后只要這個(gè)項(xiàng)目有任何更新,你都會(huì)第一時(shí)間收到關(guān)于這個(gè)項(xiàng)目的通知提醒。 - Gist
有些時(shí)候你沒有項(xiàng)目可以開源,只是單純的想分享一些代碼片段,那這個(gè)時(shí)候Gist就派上用場了!
Git速成
- 什么是Git?
Git 是 Linux 發(fā)明者 Linus 開發(fā)的一款新時(shí)代的版本控制系統(tǒng),那什么是版本控制系統(tǒng)呢?怎么理解?網(wǎng)上一大堆詳細(xì)的介紹,但是大多枯燥乏味,對(duì)于新手也很難理解,這里我只舉幾個(gè)例子來幫助你們理解。
熟悉編程的知道,我們?cè)谲浖_發(fā)中源代碼其實(shí)是最重要的,那么對(duì)源代碼的管理變得異常重要:
比如為了防止代碼的丟失,肯定本地機(jī)器與遠(yuǎn)程服務(wù)器都要存放一份,而且還需要有一套機(jī)制讓本地可以跟遠(yuǎn)程同步;
又比如我們經(jīng)常是好幾個(gè)人做同一個(gè)項(xiàng)目,都要對(duì)一份代碼做更改,這個(gè)時(shí)候需要大家互不影響,又需要各自可以同步別人的代碼;
又比如我們開發(fā)的時(shí)候免不了有bug,有時(shí)候剛發(fā)布的功能就出現(xiàn)了嚴(yán)重的bug,這個(gè)時(shí)候需要緊急對(duì)代碼進(jìn)行還原;
又比如隨著我們版本迭代的功能越來越多,但是我們需要清楚的知道歷史每一個(gè)版本的代碼更改記錄,甚至知道每個(gè)人歷史提交代碼的情況;
等等等類似以上的情況,這些都是版本控制系統(tǒng)能解決的問題。所以說,版本控制是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng),對(duì)于軟件開發(fā)領(lǐng)域來說版本控制是最重要的一環(huán),而Git毫無疑問是當(dāng)下最流行、最好用的版本控制系統(tǒng)。 - Git安裝
Mac: https://sourceforge.net/projects/git-osx-installer/
Windows: https://git-for-windows.github.io/
Linux: apt-get install git -
Git命令列表git_common_usage.png
- Git具體命令
第一步,我們先新建一個(gè)文件夾,在文件夾里新建一個(gè)文件(本文所有操作均基于Linux命令,Windows用戶可以自己手動(dòng)新建)
mkdir git_learn (創(chuàng)建文件夾git_learn)
cd git_learn (切換到git_learn目錄)
touch git.md (新建git.md文件)
注:在進(jìn)行任何Git操作之前,都要先切換到Git 倉庫目錄下,也就是先要先切換到項(xiàng)目的文件夾目錄下。

non_git_repository.png
- git init 初始化 git 倉庫
-
git statusgit_status.png
git status 這個(gè)命令顧名思義就是查看狀態(tài),這個(gè)命令可以算是使用最頻繁的一個(gè)命令了,建議大家沒事就輸入下這個(gè)命令,來查看你當(dāng)前 git 倉庫的一些狀態(tài)。
默認(rèn)就直接在master分支,關(guān)于分支的概念后面會(huì)提,這時(shí)最主要的是提示 git.md 文件Untracked files,就是說git.md這個(gè)文件還沒有被跟蹤,還沒有提交在 git 倉庫里呢,而且提示你可以使用git add 去操作你想要提交的文件。 -
git add
上面提示 git.md 文件還沒有提交到 git 倉庫里,這個(gè)時(shí)候我們可以隨便編輯下 git.md 文件,然后輸入 git add git.md, 然后再輸入git status:
此時(shí)提示以下文件Changes to be committed, 意思就是a.md文件等待被提交,當(dāng)然你可以使用git rm --cached 這個(gè)命令去移除這個(gè)緩存。git_add_status.png - git commit
接著我們輸入git commit -m 'first commit',這個(gè)命令什么意思呢? commit 是提交的意思, -m代表是提交信息,執(zhí)行了以上命令代表我們已經(jīng)正式進(jìn)行了第一次提交。
這個(gè)時(shí)候再輸入git status,會(huì)提示nothing to commit。
注意:安裝好git后,在命令行或終端中使用下面的命令可以設(shè)置git自己的名字和電子郵件。這是因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。git config命令的git_commit.png–global參數(shù),用了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉庫都會(huì)使用這個(gè)配置,當(dāng)然也可以對(duì)某個(gè)倉庫指定不同的用戶名和Email地址。配置好之后可以使用git config -l查看配置。 - git log 查看所有commit記錄
- git add & git commit
看到這里估計(jì)很多人會(huì)有疑問,我想要提交直接進(jìn)行 commit不就行了么,為什么先要再add一次呢?首先 git add 是先把改動(dòng)添加到一個(gè)[暫存區(qū)],你可以理解成是一個(gè)緩存區(qū)域,臨時(shí)保存你的改動(dòng),而git commit才是最后真正的提交。這樣做的好處就是防止誤提交,當(dāng)然也有辦法把這兩步合并成一步,不過后面再介紹,建議新手先按部就班的一步步來。 - git branch 查看、創(chuàng)建(git branch name)分支
branch即分支的意思,分支的概念很重要,尤其是團(tuán)隊(duì)協(xié)作的時(shí)候,假設(shè)兩個(gè)人都在做同一個(gè)項(xiàng)目,這個(gè)時(shí)候分支就是保證兩人能協(xié)同合作的最大利器了。舉個(gè)例子,A, B倆人都在做同一個(gè)項(xiàng)目,但是不同的模塊,這個(gè)時(shí)候A新建了一個(gè)分支叫a, B新建了一個(gè)分支叫b,這樣A、B做的所有代碼改動(dòng)都各自在各自的分支,互不影響,等到倆人都把各自的模塊都做完了,最后再統(tǒng)一把分支合并起來。
執(zhí)行 git init 初始化git倉庫之后會(huì)默認(rèn)生成一個(gè)主分支 master,也是你所在的默認(rèn)分支,也基本是實(shí)際開發(fā)正式環(huán)境下的分支,一般情況下 master 分支不會(huì)輕易直接在上面操作的,你們可以輸入git branch 查看下當(dāng)前分支情況:
如果我們想在此基礎(chǔ)上新建一個(gè)分支呢,很簡單,執(zhí)行 git branch a就新建了一個(gè)名字叫 a 的分支,這時(shí)候分支a跟分支master是一模一樣的內(nèi)容,git checkout a可以切換到分之a(chǎn)。git checkout -b a表示新建分支a,并直接切換。 - git merge 合并分支
合并分之分兩步:第一步是切換到 master分支,如果你已經(jīng)在了就不用切換了,第二步執(zhí)行g(shù)it merge a,意思就是把a(bǔ)分支的代碼合并過來,不出意外,這個(gè)時(shí)候a分支的代碼就順利合并到 master 分支來了。為什么說不出意外呢?因?yàn)檫@個(gè)時(shí)候可能會(huì)有沖突而合并失敗,留個(gè)包袱,這個(gè)到后面進(jìn)階的時(shí)候再講。 - git branch -d a 刪除分支
a - git branch -D a 強(qiáng)制刪除分支
a - git tag 查看歷史tag記錄
git tag v1.0表示給代碼打上版本標(biāo)簽,git checkout v1.0 ,切換到v1.0tag的代碼狀態(tài)了。
本系列內(nèi)容轉(zhuǎn)載總結(jié)自原創(chuàng)作者stormzhang,其
個(gè)人博客: http://stormzhang.com
GitHub: https://github.com/stormzhang
知乎: stormzhang
微博: googdev



