將本地項目上傳到Github(兩種簡單、方便的方法)
一、第一種方法:
首先你需要一個github賬號,所有還沒有的話先去注冊吧!
https://github.com/
我們使用git需要先安裝git工具,這里給出下載地址,下載后一路直接安裝即可:
https://git-for-windows.github.io/
1.進(jìn)入Github首頁,點擊New repository新建一個項目

?2.填寫相應(yīng)信息后點擊create即可
Repository name: 倉庫名稱
Description(可選): 倉庫描述介紹
Public,?Private?: 倉庫權(quán)限(公開共享,私有或指定合作者)
Initialize this repository with a README: 添加一個README.md
gitignore: 不需要進(jìn)行版本管理的倉庫類型,對應(yīng)生成文件.gitignore
license: 證書類型,對應(yīng)生成文件LICENSE


4.點擊Clone or dowload會出現(xiàn)一個地址,copy這個地址備用。

5.接下來就到本地操作了,首先右鍵你的項目,如果你之前安裝git成功的話,右鍵會出現(xiàn)兩個新選項,分別為Git Gui Here,Git Bash Here,這里我們選擇Git Bash Here,進(jìn)入如下界面,Test_Bluetooth即為我的項目名。

6.接下來輸入如下代碼(關(guān)鍵步驟),把github上面的倉庫克隆到本地
git clone https://github.com/CKTim/BlueTooth.git(https://github.com/CKTim/BlueTooth.git替換成你之前復(fù)制的地址)

?7.這個步驟以后你的本地項目文件夾下面就會多出個文件夾,該文件夾名即為你github上面的項目名,如圖我多出了個Test文件夾,我們把本地項目文件夾下的所有文件(除了新多出的那個文件夾不用),其余都復(fù)制到那個新多出的文件夾下,

8.接著繼續(xù)輸入命令 cd Test,進(jìn)入Test文件夾

9.接下來依次輸入以下代碼即可完成其他剩余操作:
git add . ? ? ? ?(注:別忘記后面的.,此操作是把Test文件夾下面的文件都添加進(jìn)來)
git commit ?-m ?”提交信息” ?(注:“提交信息”里面換成你需要,如“first commit”)
git push -u origin master ? (注:此操作目的是把本地倉庫push到github上面,此步驟需要你輸入帳號和密碼)



二、第二種方法:
第一步:我們需要先創(chuàng)建一個本地的版本庫(其實也就是一個文件夾)。
? ? ? ?你可以直接右擊新建文件夾,也可以右擊打開Git bash命令行窗口通過命令來創(chuàng)建。
? ? ? ?現(xiàn)在我通過命令行在桌面新建一個TEST文件夾(你也可以在其他任何地方創(chuàng)建這個文件夾),并且進(jìn)入這個文件夾
第二步:通過命令git init把這個文件夾變成Git可管理的倉庫
這時你會發(fā)現(xiàn)TEST里面多了個.git文件夾,它是Git用來跟蹤和管理版本庫的。如果你看不到,是因為它默認(rèn)是隱藏文件,那你就需要設(shè)置一下讓隱藏文件可見。
第三步:這時候你就可以把你的項目粘貼到這個本地Git倉庫里面(粘貼后你可以通過git status來查看你當(dāng)前的狀態(tài)),然后通過git add把項目添加到倉庫(或git add .把該目錄下的所有文件添加到倉庫,注意點是用空格隔開的)。在這個過程中你其實可以一直使用git status來查看你當(dāng)前的狀態(tài)。
這里提示你雖然把項目粘貼過來了,但還沒有add到Git倉庫上,然后我們通過git add .把剛才復(fù)制過來的項目全部添加到倉庫上。
?第四步:用git commit把項目提交到倉庫。
?-m后面引號里面是本次提交的注釋內(nèi)容,這個可以不寫,但最好寫上,不然會報錯,詳情自行Google。?好了,我們本地Git倉庫這邊的工作做完了,下面就到了連接遠(yuǎn)程倉庫(也就是連接Github)
? ? ? 由于本地Git倉庫和Github倉庫之間的傳輸是通過SSH加密的,所以連接時需要設(shè)置一下:
第五步:創(chuàng)建SSH KEY。先看一下你C盤用戶目錄下有沒有.ssh目錄,有的話看下里面有沒有id_rsa和id_rsa.pub這兩個文件,有就跳到下一步,沒有就通過下面命令創(chuàng)建
? $ ssh-keygen -t rsa -C"youremail@example.com"
? ? ? ?然后一路回車。這時你就會在用戶下的.ssh目錄里找到id_rsa和id_rsa.pub這兩個文件
?第六步:登錄Github,找到右上角的圖標(biāo),打開點進(jìn)里面的Settings,再選中里面的SSH and GPG KEYS,點擊右上角的New SSH key,然后Title里面隨便填,再把剛才id_rsa.pub里面的內(nèi)容復(fù)制到Title下面的Key內(nèi)容框里面,最后點擊Add SSH key,這樣就完成了SSH Key的加密。具體步驟也可看下面:
?第七步:在Github上創(chuàng)建一個Git倉庫。
? ? ?你可以直接點New repository來創(chuàng)建,比如我創(chuàng)建了一個TEST2的倉庫(因為我里面已經(jīng)有了一個test的倉庫,所以不能再創(chuàng)建TEST倉庫)。
?? 第八步:在Github上創(chuàng)建好Git倉庫之后我們就可以和本地倉庫進(jìn)行關(guān)聯(lián)了,根據(jù)創(chuàng)建好的Git倉庫頁面的提示,可以在本地TEST倉庫的命令行輸入:
$ git remote add origin https://github.com/guyibang/TEST2.git
?注意origin后面加的是你Github上創(chuàng)建好的倉庫的地址。
?第九步:關(guān)聯(lián)好之后我們就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程倉庫(也就是Github)上了,通過:
$ git push -u origin master
?由于新建的遠(yuǎn)程倉庫是空的,所以要加上-u這個參數(shù),等遠(yuǎn)程倉庫里面有了內(nèi)容之后,下次再從本地庫上傳內(nèi)容的時候只需下面這樣就可以了:
$ git push origin master
?上傳項目的過程可能需要等一段時間,完成之后是這樣的:
?這時候你再重新刷新你的Github頁面進(jìn)入剛才新建的那個倉庫里面就會發(fā)現(xiàn)項目已經(jīng)成功上傳了:
至此就完成了將本地項目上傳到Github的整個過程。
另外,這里有個坑需要注意一下,就是在上面第七步創(chuàng)建遠(yuǎn)程倉庫的時候,如果你勾選了Initialize this repository with a README(就是創(chuàng)建倉庫的時候自動給你創(chuàng)建一個README文件),那么到了第九步你將本地倉庫內(nèi)容推送到遠(yuǎn)程倉庫的時候就會報一個failed to push some refstohttps://github.com/guyibang/TEST2.git的錯。
? ? ??這是由于你新創(chuàng)建的那個倉庫里面的README文件不在本地倉庫目錄中,這時我們可以通過以下命令先將內(nèi)容合并以下:
$ git pull --rebase origin master
這時你再push就能成功了。
? ? ?總結(jié):其實只需要進(jìn)行下面幾步就能把本地項目上傳到Github
1、在本地創(chuàng)建一個版本庫(即文件夾),通過git init把它變成Git倉庫;
2、把項目復(fù)制到這個文件夾里面,再通過git add .把項目添加到倉庫;
3、再通過git commit -m “注釋內(nèi)容”把項目提交到倉庫;
4、在Github上設(shè)置好SSH密鑰后,新建一個遠(yuǎn)程倉庫,通過git remote add origin?https://github.com/guyibang/TEST2.git將本地倉庫和遠(yuǎn)程倉庫進(jìn)行關(guān)聯(lián);
5、最后通過git push -u origin master把本地倉庫的項目推送到遠(yuǎn)程倉庫(也就是Github)上;(若新建遠(yuǎn)程倉庫的時候自動創(chuàng)建了README文件會報錯,解決辦法看上面)。
三、Git命令
查看、添加、提交、刪除、找回,重置修改文件
git help <command> # 顯示command的help
git show # 顯示某次提交的內(nèi)容 git show $id?
git co -- <file> # 拋棄工作區(qū)修改?
git co . # 拋棄工作區(qū)修改?
git add <file> # 將工作文件修改提交到本地暫存區(qū)?
git add . # 將所有修改過的工作文件提交暫存區(qū)?
git rm <file> # 從版本庫中刪除文件?
git rm <file> --cached # 從版本庫中刪除文件,但不刪除文件?
git reset <file> # 從暫存區(qū)恢復(fù)到工作文件?
git reset -- . # 從暫存區(qū)恢復(fù)到工作文件?
git reset --hard # 恢復(fù)最近一次提交過的狀態(tài),即放棄上次提交后的所有本次修改 ,撤銷commit
git ci --amend # 修改最后一次提交記錄?
git revert <$id> # 恢復(fù)某次提交的狀態(tài),恢復(fù)動作本身也創(chuàng)建次提交對象?
git revert HEAD # 恢復(fù)最后一次提交的狀態(tài)?
查看文件diff
git diff test? ??查看當(dāng)前目錄和另外一個分支的差別
查看提交記錄
git log git log <file> # 查看該文件每次提交記錄
git log -p <file> # 查看每次詳細(xì)修改內(nèi)容的diff?
git log -p -2 # 查看最近兩次詳細(xì)修改內(nèi)容的diff?
git log --stat #查看提交統(tǒng)計信息?
tig:Mac上可以使用tig代替diff和log,brew install tig
Git 本地分支管理
查看、切換、創(chuàng)建和刪除分支
git br -r # 查看遠(yuǎn)程分支
git br <new_branch> # 創(chuàng)建新的分支?
git br -v # 查看各個分支最后提交信息?
git br --merged # 查看已經(jīng)被合并到當(dāng)前分支的分支?
git br --no-merged # 查看尚未被合并到當(dāng)前分支的分支?
git co <branch> # 切換到某個分支?
git co -b <new_branch> # 創(chuàng)建新的分支,并且切換過去?
git co -b <new_branch> <branch> # 基于branch創(chuàng)建新的new_branch?
git co $id # 把某次歷史提交記錄checkout出來,但無分支信息,切換到其他分支會自動刪除?
git co $id -b <new_branch> # 把某次歷史提交記錄checkout出來,創(chuàng)建成一個分支?
git br -d <branch> # 刪除某個分支?
git br -D <branch> # 強制刪除某個分支 (未被合并的分支被刪除的時候需要強制)?
分支合并和reba
git merge <branch> # 將branch分支合并到當(dāng)前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,這樣可以生成merge提交?
git rebase master <branch> # 將master rebase到branch,相當(dāng)于: git co <branch> && git rebase master && git co master && git merge <branch>
Git補丁管理(方便在多臺機(jī)器上開發(fā)同步時用)
git merge <branch> # 將branch分支合并到當(dāng)前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,這樣可以生成merge提交?
git rebase master <branch> # 將master rebase到branch,相當(dāng)于: git co <branch> && git rebase master && git co master && git merge <branch>
merge和rebase的不同:
rebase會把你當(dāng)前分支的 commit 放到公共分支的最后面,所以叫變基。就好像你從公共分支又重新拉出來這個分支一樣。
舉例:如果你從 master 拉了個feature分支出來,然后你提交了幾個 commit,這個時候剛好有人把他開發(fā)的東西合并到 master 了,這個時候 master 就比你拉分支的時候多了幾個 commit,如果這個時候你 rebase master 的話,就會把你當(dāng)前的幾個 commit,放到那個人 commit 的后面。
merge?會把公共分支和你當(dāng)前的commit 合并在一起,形成一個新的 commit 提交
Git暫存管
git stash # 暫存
git stash list # 列所有stash?
git stash apply # 恢復(fù)暫存的內(nèi)容?
git stash drop # 刪除暫存區(qū)?
Git遠(yuǎn)程分支管理
git pull # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地
git pull --no-ff # 抓取遠(yuǎn)程倉庫所有分支更新并合并到本地,不要快進(jìn)合并?
git fetch origin # 抓取遠(yuǎn)程倉庫更新?
git merge origin/master # 將遠(yuǎn)程主分支合并到本地當(dāng)前分支?
git co --track origin/branch # 跟蹤某個遠(yuǎn)程分支創(chuàng)建相應(yīng)的本地分支?
git co -b <local_branch> origin/<remote_branch> # 基于遠(yuǎn)程分支創(chuàng)建本地分支,功能同上?
git push # push所有分支
git push origin master # 將本地主分支推到遠(yuǎn)程主分支
git push -u origin master # 將本地主分支推到遠(yuǎn)程(如無遠(yuǎn)程主分支則創(chuàng)建,用于初始化遠(yuǎn)程倉庫)?
git push origin <local_branch> # 創(chuàng)建遠(yuǎn)程分支, origin是遠(yuǎn)程倉庫名?
git push origin <local_branch>:<remote_branch> # 創(chuàng)建遠(yuǎn)程分支?
git push origin :<remote_branch> #先刪除本地分支(git br -d <branch>),然后再push刪除遠(yuǎn)程分支?
Git遠(yuǎn)程倉庫管
git remote -v # 查看遠(yuǎn)程服務(wù)器地址和倉庫名稱
git remote show origin # 查看遠(yuǎn)程服務(wù)器倉庫狀態(tài)?
git remote add origin git@ github:robbin/robbin_site.git # 添加遠(yuǎn)程倉庫地址?
git remote set-url origin git@ github.com:robbin/robbin_site.git # 設(shè)置遠(yuǎn)程倉庫地址(用于修改遠(yuǎn)程倉庫地址) git remote rm <repository> # 刪除遠(yuǎn)程倉庫
創(chuàng)建遠(yuǎn)程倉庫
git clone --bare robbin_site robbin_site.git # 用帶版本的項目創(chuàng)建純版本倉庫
scp -r my_project.git git@ git.csdn.net:~ # 將純倉庫上傳到服務(wù)器上?
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服務(wù)器創(chuàng)建純倉庫?
git remote add origin git@ github.com:robbin/robbin_site.git # 設(shè)置遠(yuǎn)程倉庫地址?
git push -u origin master # 客戶端首次提交?
git push -u origin develop # 首次將本地develop分支提交到遠(yuǎn)程develop分支,并且track?
git remote set-head origin master # 設(shè)置遠(yuǎn)程倉庫的HEAD指向master分支
也可以命令設(shè)置跟蹤遠(yuǎn)程庫和本地庫
git branch--set-upstream? master origin/master??
git branch--set-upstream? develop origin/develop
合并別的分支的某次提交而不是某個分支
git cherry-pick可以理解為”挑揀”提交,它會獲取某一個分支的單筆提交,并作為一個新的提交引入到你當(dāng)前分支上。
git cherry-pick commitid? ? 別的分支上的commtid