Git版本控制和上傳GitHub(一)(增刪改查愁铺,及遠(yuǎn)程同步)

如果多人做一個(gè)項(xiàng)目奔穿,那就要用到版本控制豹休。
SVN是集中式控制炊昆,GIt是分布式控制 這里說Git
SVN是都在服務(wù)器管理(斷網(wǎng)傳不了),Git是服務(wù)器有一份倉庫威根,本地有一份倉庫(斷網(wǎng)還能存本地的)
第一凤巨,防止項(xiàng)目崩掉,可以退回之前版本
第二洛搀,每次上傳都有個(gè)信息敢茁,你改了什么代碼
第三,保存是改變差異留美,而不是重新再來一份彰檬,不會占硬盤
第四,還有改了同一腳本代碼谎砾,會進(jìn)行自動合并逢倍,改到同一代碼就需要手動合并,選擇去用哪一個(gè)版本景图。(沖突是傳不上去的)

GitHub是全球最大的代碼托管倉庫
不過在國外網(wǎng)速上傳可能有點(diǎn)感人 之前有用過碼云
教程看的是廖雪峰的Git 其實(shí)還有MySQL教程
雖然人家是Java Python大神但是不影響我們學(xué)習(xí)
https://www.liaoxuefeng.com/wiki/896043488029600
因?yàn)镚it一開始是在Linux上開發(fā)的所以少不了命令行较雕,需要下一定的學(xué)習(xí)成本去用命令行控制
然后開始下載Git 這個(gè)是官網(wǎng)
https://git-scm.com/downloads
選擇系統(tǒng)第二個(gè)就是Windows系統(tǒng) 然后開始下載

image.png

國外網(wǎng)網(wǎng)速感人 停停走走 網(wǎng)速為0我建議刪了重新下載 這個(gè)是網(wǎng)盤 不過是2.15版本,我現(xiàn)在最新的是2.21
https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit
然后選擇一個(gè)安裝目錄之后一路Next

配置Git添加文件

安裝完畢 在桌面右鍵


image.png

就會有這兩個(gè)
點(diǎn)擊Bash有個(gè)小黑窗口


image.png

然后設(shè)置名字郵箱挚币,改一改自己敲上去亮蒋,好像復(fù)制不太行
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

--global參數(shù)表示你電腦上所有Git倉庫都會用這個(gè)配置

然后創(chuàng)建版本庫

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于顯示當(dāng)前目錄 但是不要有中文
然后用 git init 把這個(gè)目錄改變?yōu)镚it可管理的目錄

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

然后我們創(chuàng)建的目錄多了個(gè)這個(gè)


image.png

桌面自動多了個(gè)這個(gè)文件件


image.png

現(xiàn)在我們試著吧Text文件添加到倉庫
創(chuàng)建一個(gè)ReadMe.txt 然后放在learngit目錄下外面的目錄Git找不到
用這個(gè)添加命令

$ git add readme.txt

什么都不報(bào)就是成功了
然后用命令git commit把文件提交到倉庫

$ git commit -m'readMeFile'
[master (root-commit) 783b9ec] readMeFile
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ReadMe.txt

-m后是本次提交說明
成功了會告訴后兩句
1個(gè)文件發(fā)生改變,插入0行妆毕,刪除0行
然后發(fā)現(xiàn)我們Add是分別多個(gè)Add慎玖,提交就是一起提交

Git修改

然后我們在txt多寫幾行別的東西
用git status命令查看當(dāng)前倉庫狀態(tài)

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   ReadMe.txt

no changes added to commit (use "git add" and/or "git commit -a")

上面輸出說文件被改過了
然后用git diff(diff就是difference差別)查看怎么修改的這個(gè)文件信息

$ git diff ReadMe.txt
diff --git a/ReadMe.txt b/ReadMe.txt
index e69de29..85476a8 100644
--- a/ReadMe.txt
+++ b/ReadMe.txt
@@ -0,0 +1 @@
+sdfsdfsdfsdf
\ No newline at end of file

下面的+1就是我們改了一行

然后我們用命令git add

$ git add ReadMe.txt

然后再git status查看狀態(tài)

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   ReadMe.txt

將要被提交的修改包括ReadMe.txt
用git commit提交

$ git commit -m'change'
[master 42158b4] change
 1 file changed, 1 insertion(+)

再用git status查看倉庫狀態(tài)

$ git status
On branch master
nothing to commit, working tree clean

告訴我們沒有什么可以提交的,工作目錄是干凈的

Git 版本退回

用git log查看一共多少個(gè)版本

$ git log
commit 42158b41256749a880ad58bb191bd64470eed1cc (HEAD -> master)
Author: Corn <1004019267@qq.com>
Date:   Sun Jun 2 15:02:37 2019 +0800

    change

commit 783b9ec203536a24a34d44f5dfd7ad1f114f28b6
Author: Corn <1004019267@qq.com>
Date:   Sun Jun 2 14:48:52 2019 +0800

    readMeFile

如果嫌比較多可以后面加上--pretty=oneline

$  git log --pretty=oneline
42158b41256749a880ad58bb191bd64470eed1cc (HEAD -> master) change
783b9ec203536a24a34d44f5dfd7ad1f114f28b6 readMeFile

前面是版本號 后面是你的注釋 版本為毛不用123呢 那多人在一個(gè)版本里不就沖突了
用git reset退回 HEAD是當(dāng)前版本 HEAD是上一版本笛粘,上上版本是HEAD^凄吏,如果100個(gè)版本呢,就有了HEAD~100

$ git reset --hard HEAD~1
HEAD is now at 783b9ec readMeFile

然后我們用cat 函數(shù)查看內(nèi)容

$ cat ReadMe.txt

什么都沒有 因?yàn)榈谝话嫖覀兙蜎]寫
然后我們用git log查看版本

$ git log
commit 783b9ec203536a24a34d44f5dfd7ad1f114f28b6 (HEAD -> master)
Author: Corn <1004019267@qq.com>
Date:   Sun Jun 2 14:48:52 2019 +0800

    readMeFile

發(fā)現(xiàn)之前的未來被抹去了闰蛔,就像平行世界里的世界線一樣痕钢。
怎么回到未來呢,只要你沒關(guān)窗口往上找到id序六,


image.png

寫前幾位就行了 Git會自動幫你找

$ git reset --hard 42158b
HEAD is now at 42158b4 change

然后再看看內(nèi)容

$ cat ReadMe.txt
sdfsdfsdfsdf

回來了任连!
Git版本回退速度非常快例诀,他只是把HEAD指針指向不同版本

但是你關(guān)了電腦 之后再打開想回到未來怎么辦
git reflog這個(gè)記錄了你每一次命令

$ git reflog
42158b4 (HEAD -> master) HEAD@{0}: reset: moving to 42158b
783b9ec HEAD@{1}: reset: moving to HEAD~0
783b9ec HEAD@{2}: reset: moving to HEAD~1
42158b4 (HEAD -> master) HEAD@{3}: commit: change
783b9ec HEAD@{4}: commit (initial): readMeFile

然后不就知道id號了

工作區(qū)和暫存區(qū)

Git和SVN不同之一就在于有個(gè)緩存區(qū)

工作區(qū)就是這個(gè)


image.png

里面的.git是版本庫


image.png

stange是緩存區(qū)随抠,master是Git自動為我們創(chuàng)建的第一個(gè)分支裁着,還有個(gè)HEAD指向第一個(gè)版本
image.png

image.png

就是add的時(shí)候東西會加入stage緩存區(qū),在我們commit時(shí)候把所有修改提交到分支
一旦提交后拱她,如果你又沒有對工作區(qū)做任何修改二驰,那么工作區(qū)就是“干凈”的


image.png

管理修改

第一次修改 -> git add -> 第二次修改 -> git commit只會修改第一次的屬性,
第一次修改 -> git add -> 第二次修改 -> git add -> git commit 相當(dāng)于把兩次修改合并提交秉沼,所以先Add完所有修改在提交

撤銷修改

checkout撤銷工作區(qū)的修改 就是丟棄工作區(qū)的修改

$ git checkout -- ReadMe.txt

這個(gè) -- 很重要 如果沒有就成了切換到另一個(gè)分支的命令了

如果是Add之后用git reset HEAD丟棄暫存區(qū)修改桶雀,然后再checkout丟棄工作區(qū)修改

$ git reset HEAD ReadMe.txt
Unstaged changes after reset:
M   ReadMe.txt

如果已經(jīng)提交了想撤銷可以用版本退回,但是起碼沒有推送到遠(yuǎn)程庫

刪除文件

$ rm ReadMe.TXT

我發(fā)現(xiàn)Git好像找文件不區(qū)分大小寫
查看發(fā)現(xiàn)文件被刪了 版本庫告訴你工作區(qū)不一樣了
這個(gè)rm -rf /慎用https://www.zhihu.com/question/29438735這是車禍慘案現(xiàn)場

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    ReadMe.txt

no changes added to commit (use "git add" and/or "git commit -a")

然后有兩個(gè)選擇
git rm刪掉唬复,并且git commit提交
或者刪錯(cuò)了 撤銷恢復(fù)到最新版本 因?yàn)榘姹編煊袛?shù)據(jù) 但是只能回到最近一次最后提交到的位置

$ git checkout -- ReadMe.txt

遠(yuǎn)程倉庫

一臺電腦充當(dāng)服務(wù)器的角色矗积,每天24小時(shí)開機(jī),其他每個(gè)人都從這個(gè)“服務(wù)器”倉庫克隆一份到自己的電腦上敞咧,并且各自把各自的提交推送到服務(wù)器倉庫里棘捣,也從服務(wù)器倉庫中拉取別人的提交
因?yàn)闆]有服務(wù)器所以鏈接GitHub
由于本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的所以要設(shè)置。
后面寫你的郵箱 然后一路回車

$ ssh-keygen -t rsa -C 'youremail@example.com'
$ ssh-keygen -t rsa -C '1004019267@qq.com'
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Created directory '/c/Users/Administrator/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:XOf1g0shqkpFfD58BkWoXNee5GHV9uSstZGY9afpu7E 1004019267@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|          oo. ...|
|      .  o.. = .+|
|      .oooo.*.B=+|
|      .++.oo.Bo+B|
|       .S= o.o *=|
|      . . + . =..|
|     . .     o.  |
|    . .       .o |
|     .        Eo |
+----[SHA256]-----+

這個(gè)就是生成的位置


image.png

一個(gè)私鑰一個(gè)共鑰 公鑰可以告訴別人


image.png

這個(gè)是GitHub官網(wǎng)
https://github.com/
登錄自己賬號 沒有就注冊
英文的話可以用瀏覽器自行翻譯

image.png

image.png

點(diǎn)擊new新的
起一個(gè)標(biāo)題還有把公鑰粘貼過來
image.png

然后你每在一個(gè)電腦都往上添加一個(gè)公鑰就可以每臺電腦都提交了休建,別人只能看不能改
如果不想別人看就掏錢成私有倉庫乍恐,要不然就自己搭一個(gè)Git服務(wù)器
公鑰私鑰就是防止,萬一連接的是假冒服務(wù)器或者中間人攻擊测砂,核對數(shù)據(jù)安全性禁熏。
流程大概是客戶端請求服務(wù)器,客戶端要求驗(yàn)證邑彪,服務(wù)器找你在服務(wù)器放的公鑰瞧毙,然后找到與你本地公鑰核對,公鑰一致寄症,服務(wù)器用公鑰加密發(fā)送給你宙彪,你用私鑰解密,然后再上傳

遠(yuǎn)程倉庫與本地同步(GitHub)

找到GitHub左上角 找到


image.png

起一個(gè)名字創(chuàng)建其他默認(rèn)
然后送你一個(gè)鏈接有巧,讓你要么與遠(yuǎn)程倉庫關(guān)聯(lián)释漆,要么創(chuàng)建


image.png

我的就是選擇SSH協(xié)議的第二條照著打,你們要打自己生成的不然就關(guān)聯(lián)到我的了篮迎,之后因?yàn)槟愎€不在手中所以推不上去男图。

然后因?yàn)橹暗谋晃覀儎h了 我們要找回來


image.png

image.png

image.png

然后文件回來了

然后
第二條不要選他的復(fù)制!甜橱!大坑
把他給的這兩邊空格去掉 不然一直
git remote add [<options>] <name> <url>

image.png

用http的就不會這樣放心的復(fù)制
然后輸入push推送 又掛了


image.png

然后又是個(gè)大坑Q钒省!岂傲!復(fù)制過來的 即使不是復(fù)制
點(diǎn)后的空格也不能要D疡伞!


image.png

如果添加過遠(yuǎn)程連接
先git remote rm origin取消連接
再添加

image.png

終于好了
這個(gè)是GitHub的SSH連接第一次驗(yàn)證GitHub確認(rèn)你的Key信息是否對,是不是你想連接的地址
Yes就對了
這個(gè)警告是永久添加key到已知主機(jī)列表中乃戈,以后就不用來回輸密碼了
image.png

如果你怕不是真的GitHub 這個(gè)地址可以去核對 不過一般沒人看
https://help.github.com/en/articles/githubs-ssh-key-fingerprints
然后
image.png

網(wǎng)站就出現(xiàn)了我們本地的庫
從現(xiàn)在開始 只用這個(gè)命令就可以提交了

$ git push origin master

從遠(yuǎn)程倉庫克隆

創(chuàng)建一個(gè)庫


image.png

最下面勾上克隆 然后自動多了個(gè)ReadMe


image.png

下面使用命令git clone克隆出來一個(gè)本地庫
image.png

老夫以身試毒 看看能不能粘貼 這個(gè)是可以的褂痰,還有別忘了前面加克隆命令


image.png

這樣好像可以查看這個(gè)目錄有什么
image.png

如果有多個(gè)人協(xié)作開發(fā),那么每個(gè)人各自從遠(yuǎn)程克隆一份就可以了症虑。
你也許還注意到缩歪,GitHub給出的地址不止一個(gè),還可以用https://github.com/michaelliao/gitskills.git這樣的地址谍憔。實(shí)際上匪蝙,Git支持多種協(xié)議,默認(rèn)的git://使用ssh韵卤,但也可以使用https等其他協(xié)議骗污。
使用https除了速度慢以外崇猫,還有個(gè)最大的麻煩是每次推送都必須輸入口令沈条,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh協(xié)議而只能用https。
這個(gè)是引用人家的原話

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诅炉,一起剝皮案震驚了整個(gè)濱河市蜡歹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涕烧,老刑警劉巖月而,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異议纯,居然都是意外死亡父款,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門瞻凤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來憨攒,“玉大人,你說我怎么就攤上這事阀参「渭” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵蛛壳,是天一觀的道長杏瞻。 經(jīng)常有香客問我,道長衙荐,這世上最難降的妖魔是什么捞挥? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮忧吟,結(jié)果婚禮上树肃,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑罗,他們只是感情好胸嘴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布雏掠。 她就那樣靜靜地躺著,像睡著了一般劣像。 火紅的嫁衣襯著肌膚如雪乡话。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天耳奕,我揣著相機(jī)與錄音绑青,去河邊找鬼。 笑死屋群,一個(gè)胖子當(dāng)著我的面吹牛闸婴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芍躏,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邪乍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了对竣?” 一聲冷哼從身側(cè)響起庇楞,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎否纬,沒想到半個(gè)月后吕晌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡临燃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年睛驳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膜廊。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乏沸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溃论,到底是詐尸還是另有隱情屎蜓,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布钥勋,位于F島的核電站炬转,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏算灸。R本人自食惡果不足惜扼劈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菲驴。 院中可真熱鬧荐吵,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薯蝎,卻和暖如春遥倦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背占锯。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工袒哥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人消略。 一個(gè)月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓堡称,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艺演。 傳聞我的和親對象是個(gè)殘疾皇子却紧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355