git的哲學(xué)--沒有消息就是好消息
基本工作流程:
簡(jiǎn)單來(lái)說(shuō)就是把[github遠(yuǎn)程倉(cāng)庫(kù)]的東西拿回到電腦里窟坐,編輯一番海渊,然后把新文件add到[緩存區(qū)]再commit到[本地倉(cāng)庫(kù)]最后push到[github的遠(yuǎn)程倉(cāng)庫(kù)]。具體如下:
- 創(chuàng)建一個(gè)文件夾哲鸳,git init將其初始化。
- 使用git clone命令把github遠(yuǎn)程倉(cāng)庫(kù)拿過(guò)來(lái)盔憨,(git clone xxxxx)
- 進(jìn)行工作徙菠,工作結(jié)束后把編輯或新增的文件用git add xx這個(gè)命令添加到暫存區(qū)。
- 用[git commit -m '這地方寫注釋'] 命令把暫存區(qū)的東西提交到本地倉(cāng)庫(kù)郁岩。
- 用git push命令把本地倉(cāng)庫(kù)的東西發(fā)到Github的遠(yuǎn)程倉(cāng)庫(kù)里婿奔。
- 如果clone的倉(cāng)庫(kù)被別人修改了,記得git pull一下问慎,要不然不能push萍摊。(作業(yè))
如果多個(gè)分支,記得git pull origin master寫具體點(diǎn)如叼。
ps:如果想再github 上參加開源項(xiàng)目冰木,需要先把這個(gè)項(xiàng)目fork到自己賬號(hào)下的倉(cāng)庫(kù),然后clone到本地笼恰,這樣才能push修改踊沸,否則沒有權(quán)限的話不能push,最后如果你想?yún)⑴c開源項(xiàng)目社证,就在官方倉(cāng)庫(kù)點(diǎn)pull request逼龟,申請(qǐng)一下。
常見情況
-
如果工作區(qū)有錯(cuò)誤編輯追葡,怎么辦腺律?
-
如果我已經(jīng)把錯(cuò)誤內(nèi)容add到暫存區(qū)了奕短,怎么辦?
-
如果我已經(jīng)把錯(cuò)誤內(nèi)容commit到本地倉(cāng)庫(kù)了匀钧,怎么辦翎碑?
-
如果我已經(jīng)退回到某個(gè)歷史版本了,但我又想恢復(fù)回新版本榴捡,怎么辦杈女?
一、如果工作區(qū)有錯(cuò)誤編輯吊圾,怎么辦达椰?
使用git checkout -- xxx 命令,這時(shí)分兩種情況
- 文件沒add项乒,那么該命令會(huì)讓文件回到和本地倉(cāng)庫(kù)完全一樣的狀態(tài)啰劲。
- 文件add了,那么該命令會(huì)讓文件回到被添加到暫存區(qū)后的狀態(tài)檀何。
ps:這個(gè)命令的本質(zhì)其實(shí)是用本地倉(cāng)庫(kù)的狀態(tài)替換工作區(qū)的狀態(tài)蝇裤,所以也可以用來(lái)恢復(fù)被錯(cuò)誤刪除的文件。
二频鉴、如果我已經(jīng)把錯(cuò)誤內(nèi)容add到暫存區(qū)了栓辜,怎么辦?
這時(shí)使用git checkout命令只能操作工作區(qū)文件垛孔,暫存區(qū)的撤銷使用命令:
git reset HEAD xxx 藕甩,這個(gè)命令可以把暫存區(qū)的修改撤銷掉。
ps:把暫存區(qū)的修改撤銷以后周荐,如果使用git checkout命令狭莱,會(huì)讓工作區(qū)文件回到本地倉(cāng)庫(kù)狀態(tài),而不是曾經(jīng)的暫存區(qū)里的狀態(tài)概作。
三腋妙、如果我已經(jīng)把錯(cuò)誤內(nèi)容commit到本地倉(cāng)庫(kù)了,怎么辦讯榕?
每次commit時(shí)骤素,git都會(huì)對(duì)修改進(jìn)行快照,保存文件當(dāng)時(shí)的狀態(tài)瘩扼。
先使用[git log]命令谆甜,查看這些被保存的快照。最上面的快照是最近的集绰。
確定了要撤回到哪個(gè)快照后规辱,使用[git reset --hard HEAD~數(shù)字]命令,HEAD是當(dāng)前版本栽燕,后面的數(shù)字是幾就往前數(shù)幾個(gè)版本罕袋。
ps:也可以使用[git reset --hard xxxx]命令改淑,xxxx是commit id號(hào)。
四浴讯、如果我已經(jīng)退回到某個(gè)歷史版本了朵夏,但我又想恢復(fù)回新版本,怎么辦榆纽?
如果已經(jīng)退回到某個(gè)歷史版本了仰猖,這時(shí)使用[git log]就只能看到當(dāng)前版本(退回到的這個(gè)版本)和更早的快照。
這時(shí)應(yīng)使用[git reflog]命令奈籽,顯示全部記錄饥侵,找到想要恢復(fù)的‘未來(lái)版本’的commit id號(hào)。
再使用[git reset --hard xxxxxxx]即可衣屏,xxxxx就是commit id躏升。
github遠(yuǎn)程倉(cāng)庫(kù)
剛才講的都是本地倉(cāng)庫(kù)以及現(xiàn)有遠(yuǎn)程倉(cāng)庫(kù)再克隆,其實(shí)也可以直接往遠(yuǎn)程倉(cāng)庫(kù)推送狼忱。
步驟如下:
- 先有一個(gè)本地倉(cāng)庫(kù)和一個(gè)遠(yuǎn)程倉(cāng)庫(kù)
- 把他倆綁定膨疏,使用[git remote add origin git@github.com:github賬戶名/github倉(cāng)庫(kù)名.git]命令
- 本地倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù),使用[git push -u origin master]命令钻弄,這樣master就綁定了佃却,以后使用[git push origin master]命令就可以把本地倉(cāng)庫(kù)master分支的最新修改推送到github的遠(yuǎn)程倉(cāng)庫(kù)了。
ps:同一個(gè)本地倉(cāng)庫(kù)窘俺,可以對(duì)應(yīng)push多個(gè)遠(yuǎn)程倉(cāng)庫(kù)双霍。
[git remote add coding 地址]這個(gè)是綁定到coding的項(xiàng)目上,git push coding master批销。
git分支操作
git分支類似平行宇宙,平時(shí)互不影響染坯,最后一合并就ok
首先使用[git branch -a]查看本地和遠(yuǎn)程的所有分支均芽,*代表目前所在的分支。
創(chuàng)建一個(gè)新分支git branch xx单鹿,切換到這個(gè)分支git checkout xx掀宋,然后就可以在各個(gè)分支愉快的工作了。
最后使用[git merge xx]命令把分支合并到master上就ok了仲锄。
記得刪除dev分支[git branch -d dev]
ps:合并命令時(shí)把xx分支合并到當(dāng)前分支劲妙,所以記得要切換到mastert上再用。
常用命令:
- git int 把一個(gè)文件夾初始化成倉(cāng)庫(kù)
- git clone 把遠(yuǎn)程倉(cāng)庫(kù)的東西拿到本地
- git add 把文件從工作區(qū)提交到暫存區(qū)
- git commit -m '注釋' 把暫存區(qū)里的東西都提交到本地倉(cāng)庫(kù)
- git push 把本地倉(cāng)庫(kù)的東西發(fā)到遠(yuǎn)程倉(cāng)庫(kù)
- git status 查看目前倉(cāng)庫(kù)的狀態(tài)
- git diff 如果你向本地倉(cāng)庫(kù)提交文件后儒喊,在工作區(qū)編輯了這個(gè)文件镣奋,git diff xx可以讓你查看兩個(gè)文件的差異。
- git checkout -- xx 把xx文件在工作區(qū)的修改全部撤銷怀愧;若xx沒add侨颈,那么回到和本地倉(cāng)庫(kù)一樣的狀態(tài)余赢,如果已經(jīng)add了,那么回到添加到暫存區(qū)后的狀態(tài)哈垢。
- git checkout xx 切換到xx分支
- git reset HEAD xx 把xx文件的暫存區(qū)修改撤銷掉妻柒。
- git log 查看本地倉(cāng)庫(kù)的提交歷史,以便確定要退回到哪個(gè)版本耘分。
- git remote -v 查看本地庫(kù)里記錄的遠(yuǎn)程庫(kù)地址举塔。
- git branch -a 查看本地和遠(yuǎn)程所有分支。
- git branch xx 創(chuàng)建新分支xx
- git checkout xx 切換到xx分支
- git merge xx 把xx合并到當(dāng)前分支
- git branch -d xx 把xx分支刪除
ps:
- git push origin master 推送到遠(yuǎn)程倉(cāng)庫(kù)的master分支求泰。
- git diff HEAD -- XX 可以查看工作區(qū)和本地倉(cāng)庫(kù)的差異