git
1. git init
使用git init
命令枉层,把一個(gè)目錄變成Git可以管理的倉(cāng)庫(kù)闻察。創(chuàng)建成功纬纪,會(huì)提示創(chuàng)建了一個(gè)空的倉(cāng)庫(kù)(empty Git repository)揍移,該文件夾下回有一個(gè)隱藏的.git
文件。
2. git add
使用git add
命令呆盖,將文件添加到倉(cāng)庫(kù)拖云,該命令實(shí)際上是一個(gè)腳本命令,沒(méi)有任何提示应又,說(shuō)明添加成功宙项。例如:git add readme.md
3. git commit
使用git commit
命令,將文件提交到倉(cāng)庫(kù)株扛。一般增加 -m
來(lái)添加一些提交說(shuō)明尤筐。例如:git commit -m wrote a readme file
4. git status
使用git status
查看倉(cāng)庫(kù)當(dāng)前的狀態(tài),比如哪些文件被修改過(guò)
5. git diff
使用git diff
查看文件具體的修改內(nèi)容
6. git log
git log
命令可以顯示從最近到最遠(yuǎn)的提交日志洞就。如果嫌輸出的信息太多盆繁,可以使用git log --pretty=oneline
來(lái)查看日志信息
7. git reset
Git必須知道當(dāng)前版本是哪個(gè)版本,在Git中旬蟋,用 HEAD
表示當(dāng)前版本油昂,上一個(gè)版本就是HEAD^
,上上一個(gè)版本就是HEAD^^
,當(dāng)然往上100個(gè)版本寫(xiě)100個(gè)^
比較容易數(shù)不過(guò)來(lái)冕碟,所以寫(xiě)成HEAD~100
稠腊。
現(xiàn)在,我們要把當(dāng)前版本回退到上一個(gè)版本鸣哀,就可以使用git reset命令:
git reset --hard HEAD^
8. git relog
現(xiàn)在,你回退到了某個(gè)版本吞彤,當(dāng)想恢復(fù)到新版本怎么辦我衬?找不到新版本的commit id怎么辦?Git提供了一個(gè)命令 git reflog
用來(lái)記錄你的每一次命令:
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
9. git checkout
如果你在readme.txt中加入了一行文件饰恕,又感覺(jué)不好挠羔,你可以刪除新加的,恢復(fù)到原來(lái)的埋嵌。Git會(huì)告訴你破加,git checkout -- file
可以丟棄工作區(qū)的修改,例如:
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是雹嗦,把readme.txt文件在工作區(qū)的修改全部撤銷(xiāo)范舀,這里有兩種情況:
- 一種是readme.txt自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在了罪,撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài)锭环;
- 一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改泊藕,現(xiàn)在辅辩,撤銷(xiāo)修改就回到添加到暫存區(qū)后的狀態(tài)。
總之娃圆,就是讓這個(gè)文件回到最近一次git commit
或git add
時(shí)的狀態(tài)玫锋。
現(xiàn)在來(lái)看幾種情況,如何撤銷(xiāo)修改
當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容讼呢,想直接丟棄工作區(qū)的修改時(shí)撩鹿,用命令git checkout -- file。
當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容吝岭,還添加到了暫存區(qū)時(shí)三痰,想丟棄修改,分兩步:
第一步用命令git reset HEAD file窜管,就回到了1散劫;
第二步按1操作。
- 已經(jīng)提交了不合適的修改到版本庫(kù)時(shí)幕帆,想要撤銷(xiāo)本次提交获搏,參考版本回退一節(jié),不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)。
10. git rm
確實(shí)需要從版本庫(kù)中刪除文件常熙,那就用命令git rm
刪掉纬乍,并且git commit
。
11. git remote add...
建立遠(yuǎn)程倉(cāng)庫(kù)連接
將本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行連接的命令為:
$ git remote add origin git@github.com:onlyone/learngit.git
請(qǐng)千萬(wàn)注意:
把上面的onlyone
替換成你 自己的GitHub賬戶名
裸卫,否則仿贬,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫(kù),關(guān)聯(lián)沒(méi)有問(wèn)題墓贿,但是你以后推送是推不上去的茧泪,因?yàn)槟愕腟SH Key公鑰不在我的賬戶列表中。
添加后聋袋,遠(yuǎn)程庫(kù)的名字就是origin
队伟,這是Git默認(rèn)的叫法,也可以改成別的幽勒,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫(kù)嗜侮。
注意:
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù),使用命令:
git remote add origin git@server-name:path/repo-name.git
12. git push
將本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)上:
$ git push -u origin master
把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程啥容,用git push
命令锈颗,實(shí)際上是把當(dāng)前分支master
推送到遠(yuǎn)程。
注意:
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù)干毅,使用命令
git remote add origin git@server-name:path/repo-name.git
宜猜;
關(guān)聯(lián)后,使用命令git push -u origin master
第一次推送master分支的所有內(nèi)容硝逢;
此后姨拥,每次本地提交后,只要有必要渠鸽,就可以使用命令git push origin master
推送最新修改叫乌。
13. git clone
使用git clone
克隆一個(gè)遠(yuǎn)程倉(cāng)庫(kù),例如:
$ git clone git@github.com:michaelliao/gitskills.git
14. 創(chuàng)建分支
首先創(chuàng)建分支dev徽缚,然后切換到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
命令加上 -b
參數(shù)表示創(chuàng)建并切換憨奸,相當(dāng)于以下兩條命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch
命令查看當(dāng)前分支:
$ git branch
* dev
master
git branch
命令會(huì)列出所有分支,當(dāng)前分支前面會(huì)標(biāo)一個(gè) *
號(hào)。
15. 合并分支
把 dev
分支的工作成果合并到 master
分支上窟她,git merge
命令用于合并指定分支到當(dāng)前分支:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
注意:
上面的Fast-forward
信息才避,Git告訴我們婿奔,這次合并是 “快進(jìn)模式”
,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非常快盐类,但是并不是每次合并都是快進(jìn)模式。
16. 刪除分支
合并完成后,就可以放心地刪除dev
分支了:
$ git branch -d dev
Deleted branch dev (was 5659891).
刪除后在跳,查看branch
枪萄,就只剩下master分支了:
$ git branch
* master
小結(jié):
- 查看分支:
git branch
- 創(chuàng)建分支:
git branch <name>
- 切換分支:
git checkout <name>
- 創(chuàng)建+切換分支:
git checkout -b <name>
- 合并某分支到當(dāng)前分支:
git merge <name>
- 刪除分支:
git branch -d <name>
17. 解決沖突
在兩個(gè)分支上修改同一個(gè)文件時(shí),造成了修改的不一致猫妙,在使用 git merge <name>
時(shí)瓷翻,就不能使用 快進(jìn)模式
進(jìn)行合并,而是需要手動(dòng)解決每個(gè)沖突。當(dāng)手動(dòng)解決完沖突之后:
- 使用
git add <fileName>
添加沖突文件 - 使用
git commit
提交解決后的沖突文件 - 使用
git log --graph --pretty=oneline --abbrev-commit
查看已經(jīng)解決的分支合并圖 - 使用
git branch -d <branchName>
刪除分支
18. 推送分支
要查看遠(yuǎn)程庫(kù)的信息割坠,用 git remote
或者 git remote -v
顯示更加詳細(xì)的信息逻悠。
推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù)韭脊。推送時(shí),要指定本地分支单旁,這樣沪羔,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:
git push origin master
如果要推送其他分支,比如dev象浑,就改成
git push origin dev
19. 多人協(xié)作
多人協(xié)作的工作模式通常是這樣:
- 首先蔫饰,可以試圖用
git push origin branch-name
推送自己的修改; - 如果推送失敗愉豺,則因?yàn)檫h(yuǎn)程分支比你的本地更新篓吁,需要先用
git pull
試圖合并; - 如果合并有沖突蚪拦,則解決沖突杖剪,并在本地提交;
- 沒(méi)有沖突或者解決掉沖突后驰贷,再用
git push origin branch-name
推送就能成功盛嘿!
如果git pull
提示“no tracking information”
,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建括袒,用命令git branch --set-upstream branch-name origin/branch-name
次兆。
20.Git取消跟蹤某個(gè)文件
git rm --cached FILENAME
如果是文件夾
git rm -r --cached FOLDER/.