git的安裝
由于我已經(jīng)使用git將近有大半年的時間了封字,早已安裝過败京,就沒法上圖說明辅搬,這里就不細說了
版本庫(倉庫Repo)相關(guān)
- 概念:版本庫(倉庫)其實就是一個由git管理的文件夾小腊,你在該文件夾
中創(chuàng)建修改刪除文件都有g(shù)it監(jiān)控 - 創(chuàng)建方法:
- 創(chuàng)建一個空的文件夾
$ mkdir testGit
- 查看文件夾中現(xiàn)在沒有任何文件
$ ls -a testGit
- 把該文件夾轉(zhuǎn)變成一個由git監(jiān)管的文件夾:
$testGit git init
- 此時在查看該文件夾中就會有一個
.git
文件夾,說明此刻該文件夾就開始由git跟蹤監(jiān)控了
- 對倉庫內(nèi)容修改:
向倉庫中添加.gitignore文件
- .gitignore文件作用:其中寫了那些文件不需要有g(shù)it追蹤監(jiān)控揍庄,git可以完全不管這些文件咆蒿,并且你也沒辦法把這些文件push的遠端倉庫
- .gitignore文件創(chuàng)建:在你的倉庫中touch一個名字是.gitignore(千萬不要忘記前面的. 這說明這個文件是一個隱藏文件不用ls -a是沒辦法看到的)
-
向.gitignore文件中寫入你想忽略的文件:兩個方法
1.在webstrom中安裝.ignore插件,選中你寫的項目類型自動添加內(nèi)容到.gitignore文件中
mac的使用方法:
使用快捷建:ctrl + N :
選定第一個
在以下菜單中選中你的項目類型插件會自動為你添加.gitignore文件中的內(nèi)容
Paste_Image.png
舉個例子:你向創(chuàng)建一個node項目
首先你得選中jetBrains
:因為我是用的是IDEA的編譯器币绩,而 jetBrains是生產(chǎn)IDEA各種編譯器的公司蜡秽,這些編譯器在都會自動在你的項目中添加如同.idea這一類的文件,幫助你運行你的項目缆镣,選中后就會自動幫你在.gitignore文件中添加.idea這種文件
Paste_Image.png
然后你要選中node
:因為我這是node項目
Paste_Image.png
ps:我經(jīng)常寫js項目使用npm包管理器芽突,其中有一個巨大的node-modules文件夾一定不能上傳到git遠端庫中,因此必須有.gitignore文件中添加node-module讓他被git忽略
此時我的倉庫使用npm init有npm包管理器管理
Paste_Image.png
2
倉庫修改相關(guān)
你在本地的所有修改只要沒有做過任何add.commit.push所有的內(nèi)容現(xiàn)在都在
工作區(qū)
董瞻,git監(jiān)管你現(xiàn)在工作區(qū)的操作寞蚌,通過git status
可以查看工作區(qū)有哪些修改,現(xiàn)在紅色字樣的文件都是你在工作區(qū)的修改
發(fā)現(xiàn).idea竟然也被git監(jiān)管了田巴,趕緊在.gitignore文件中添加.idea
-
這些修改通過
git add 文件路徑/.
就可以被添加到暫存區(qū)
,一下綠色字樣的文件就是已經(jīng)添加到暫存區(qū)的文件
此時暫存區(qū)有兩個文件
-
現(xiàn)在你就可以把暫存區(qū)中的所有內(nèi)容作為一次commit一并添加入你當前分支生成一個commit節(jié)點
- 接著你好想把你的項目放到遠端庫中讓很多人可以瀏覽
- 你得先將本地倉庫和你的遠端倉庫關(guān)聯(lián),但是你遠端的倉庫并不知道想跟他關(guān)聯(lián)的主機是不是被允許的,此時你需要在你使用的這臺電腦上產(chǎn)生一個秘鑰挟秤,標志你這臺電腦壹哺,并且用這個秘鑰在遠端配置,這樣遠端倉庫就可以允許你這臺電腦對他進行操作啦
向遠程庫提交本地倉庫中的代碼
在你的遠端github上創(chuàng)建一個新的Repo
Paste_Image.png
-
選定SSh地址進行copy
Paste_Image.png ssh和http克隆區(qū)別
這兩種方式的主要區(qū)別在于:使用https url克隆對初學(xué)者來說會比較方便艘刚,復(fù)制https url然后到git Bash里面直接用clone命令克隆到本地就好了管宵,但是每次fetch和push代碼都需要輸入賬號和密碼,這也是https方式的麻煩之處攀甚。而使用SSH url克隆卻需要在克隆之前先配置和添加好SSH key箩朴,因此,如果你想要使用SSH url克隆的話秋度,你必須是這個項目的擁有者炸庞。否則你是無法添加SSH key的,另外ssh默認是每次fetch和push代碼都不需要輸入賬號和密碼荚斯,如果你想要每次都輸入賬號密碼才能進行fetch和push也可以另外進行設(shè)置-
git remote add origin <你的遠端倉庫地址>
Paste_Image.png 這是我想push代碼埠居,把本地倉庫放到遠端
-
第一次push需要設(shè)置好遠程庫的名字以及push的代碼放到遠程庫的哪一個分支上 origin是遠程庫的默認倉庫名字,因此第一次push需要寫成如下樣子
push
git remote -v
:查看你現(xiàn)在關(guān)聯(lián)的遠程倉庫
git remote add origin(可以起別的名字是遠程倉庫名字) master(也可以識別的分支)
:吧當前的本地庫關(guān)聯(lián)到遠端倉庫事期,給遠端倉庫起名字是origin滥壕,并且在遠端創(chuàng)建一個master分支把這一次push的所有commit全部按照時間順序加到master分支上
git remote rm origin(可以是別的遠程倉庫)
:移除當前本地庫關(guān)聯(lián)的名字是origin的遠程倉庫(一個本地庫可以關(guān)聯(lián)多個遠端倉庫) 以后的每一次push可以直接
git push
就是把代碼push到origin 的master分支上,或者使用git push origin master
每次push都設(shè)置好要push的位置
從遠程庫拉取
- 如果你看到一個很好的項目想拿下來
git clone <項目的http/ssh地址>
刑赶,如果你clone項目的github配過你這臺電腦的秘鑰捏浊,那么你可以采用ssh地址clone懂衩,這樣你就具有修改代碼并且push代碼的權(quán)利撞叨,如果沒有配過秘鑰,你只能使用http地址clone浊洞,但是這種clone方式不能像遠程倉庫中push代碼-
這是從我的倉庫使用ssh方式clone代碼
Paste_Image.png
-
-
這是從別人的倉庫使用ssh
Paste_Image.png
Paste_Image.png -
從別人的倉庫中使用http地址clone
你需要有別人的github密碼才能push - 如果此時你和別人一起開發(fā)牵敷,當你在寫代碼的時候,別人已經(jīng)向倉庫中提交了一次代碼法希,這是master分支上多了一個節(jié)點枷餐,但是你本地卻停留在上一個節(jié)點,這是你本地代碼就跟遠端代碼不一樣了苫亦,如果此時你push毛肋,git就會提醒你當前代碼不是最新的,你要使用
git pull --reb
把遠端代碼拉下屋剑,和本地代碼在工作區(qū)合并在一起 -
git pull
=git fetch
+git merge
:使用git fetch吧遠端的origin master整個拿到本地润匙,然后使用git merge
:把本地master上沒有的節(jié)點+這次commit的節(jié)點合并解決沖突在本地成為一個新的commit節(jié)點,此時你可以push到遠端 -
git pull --reb
=git fetch
+git rebase
:使用git fetch吧遠端的origin master整個拿到本地唉匾,然后使用git rebase
:把遠端有但是本地沒有的節(jié)點先加到本地mater中孕讳,然后把這次的第一個commit節(jié)點加到master中如果有沖突解決沖突匠楚,然后在使用git rebase --continue
把下一個commit節(jié)點加進來在解決沖突,直到git rebase --continue
沒有錯誤沖突厂财,此時你就可以push代碼了
版本回退相關(guān)
- 你工作區(qū)做了某些修改芋簿,這是你不想要工作取得修改了,你可以使用
git checkout <文件路徑>
一旦checkout你的修改一定絕對完全找不回來了AПァ与斤!曾經(jīng)寫過好多代碼你不小心checkout的我好辛酸!荚恶!
此時工作區(qū)的代碼會被checkout到:
- 1.如果現(xiàn)在暫存區(qū)有沒有commit的代碼幽告,那么回到暫存區(qū)狀態(tài)
2.如果暫存區(qū)沒有代碼,回到最近的一次commit狀態(tài)
-
新添加的文件是沒辦checkout掉的裆甩,你可以直接手動刪除這個文件
Paste_Image.png -
git checkout
:你可一看到紅色字樣沒有了
Paste_Image.png -
如果此時你把某些修改add后放進了暫存區(qū)冗锁,但是你不想要這些修改了,你可以使用
git reset HEAD <文件路徑>
:從暫存區(qū)撤銷這個文件的這次add,讓這次修改回到工作區(qū)
Paste_Image.png
Paste_Image.png -
撤銷某次commit嗤栓,你可以使用
git log
查看那次commit的號碼冻河,
然后直接使用git reset --hard <commit號碼>
,HEAD
指針指向最近的一次commit,HEAD^
代表上一次commit茉帅,HEAD^^
上上次叨叙,因此你也可以采用git reset --hard HEAD^
:會退到上一次commit
git log
git reset --hard commitID
git log new 撤銷某次commit還可以使用
git reset --soft <commit Id>
,這種方式會使得你的回到上次commit但是把這次commit的內(nèi)容放進stage中堪澎,就是出現(xiàn)綠色字樣git reflog和git log
前者你可以看到你所有的commit(包含被reset掉的commit)并且是按照操作順序排序的擂错。后者你只能看到當前有的commit
評論相關(guān)
- 如果你想向別人的倉庫提交一次
pull request
從github上fork別人的倉庫,此時你的倉庫中就會多一個你剛剛從別人倉庫中拿過來的倉庫】在你的遠程倉庫中
Paste_Image.png
Paste_Image.png
-
如果你想給別人的代碼提交一個issue樱蛤,進入到別人的倉庫中點擊new issue
Paste_Image.png
Paste_Image.png
寫好提交即可
-
如果你想給某一次pull request評論
Paste_Image.png - 如果你想給某一次commit評論
-
你可以點開某一次commit然后會在你鼠標經(jīng)過的的每一行有一個小加號
Paste_Image.png
點擊一個就可以評論了
分支相關(guān)
未完待續(xù)钮呀。。昨凡。
林老師教育我們討論一個問題的時候不要沒事拉分支爽醋,所以我就沒怎么擴展以后遇到問題再慢慢補充吧~