git
1. git init
使用git init命令,把一個目錄變成Git可以管理的倉庫。創(chuàng)建成功,會提示創(chuàng)建了一個空的倉庫(empty Git repository),該文件夾下回有一個隱藏的.git文件。
2. git add
使用git add命令,將文件添加到倉庫,該命令實際上是一個腳本命令,沒有任何提示,說明添加成功。例如:git add readme.md
3. git commit
使用git commit命令,將文件提交到倉庫。一般增加 -m 來添加一些提交說明。例如:git commit -m wrote a readme file
4. git status
使用git status查看倉庫當(dāng)前的狀態(tài),比如哪些文件被修改過
5. git diff
使用git diff查看文件具體的修改內(nèi)容
6. git log
git log命令可以顯示從最近到最遠(yuǎn)的提交日志。如果嫌輸出的信息太多,可以使用git log --pretty=oneline來查看日志信息
7. git reset
Git必須知道當(dāng)前版本是哪個版本,在Git中,用 HEAD 表示當(dāng)前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當(dāng)然往上100個版本寫100個^比較容易數(shù)不過來,所以寫成HEAD~100。
現(xiàn)在,我們要把當(dāng)前版本回退到上一個版本,就可以使用git reset命令:
git reset --hard HEAD^
8. git relog
現(xiàn)在,你回退到了某個版本,當(dāng)想恢復(fù)到新版本怎么辦?找不到新版本的commit id怎么辦?Git提供了一個命令 git reflog 用來記錄你的每一次命令:
$ 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中加入了一行文件,又感覺不好,你可以刪除新加的,恢復(fù)到原來的。Git會告訴你,git checkout -- file 可以丟棄工作區(qū)的修改,例如:
$ git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
- 一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
- 一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。
現(xiàn)在來看幾種情況,如何撤銷修改
當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file。
當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步:
第一步用命令git reset HEAD file,就回到了1;
第二步按1操作。
- 已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié),不過前提是沒有推送到遠(yuǎn)程庫。
10. git rm
確實需要從版本庫中刪除文件,那就用命令git rm刪掉,并且git commit。
11. git remote add...建立遠(yuǎn)程倉庫連接
將本地倉庫和遠(yuǎn)程倉庫進(jìn)行連接的命令為:
$ git remote add origin git@github.com:onlyone/learngit.git
請千萬注意:把上面的onlyone替換成你 自己的GitHub賬戶名,否則,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫,關(guān)聯(lián)沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后,遠(yuǎn)程庫的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個名字一看就知道是遠(yuǎn)程庫。
注意:要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令:
git remote add origin git@server-name:path/repo-name.git
12. git push
將本地庫的所有內(nèi)容推送到遠(yuǎn)程倉庫上:
$ git push -u origin master
把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實際上是把當(dāng)前分支master推送到遠(yuǎn)程。
注意:要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令
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克隆一個遠(yuǎn)程倉庫,例如:
$ 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命令會列出所有分支,當(dāng)前分支前面會標(biā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. 解決沖突
在兩個分支上修改同一個文件時,造成了修改的不一致,在使用 git merge <name>時,就不能使用 快進(jìn)模式 進(jìn)行合并,而是需要手動解決每個沖突。當(dāng)手動解決完沖突之后:
- 使用
git add <fileName>添加沖突文件 - 使用
git commit提交解決后的沖突文件 - 使用
git log --graph --pretty=oneline --abbrev-commit查看已經(jīng)解決的分支合并圖 - 使用
git branch -d <branchName>刪除分支
18. 推送分支
要查看遠(yuǎn)程庫的信息,用 git remote 或者 git remote -v 顯示更加詳細(xì)的信息。
推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠(yuǎn)程庫對應(yīng)的遠(yuǎn)程分支上:
git push origin master
如果要推送其他分支,比如dev,就改成
git push origin dev
19. 多人協(xié)作
多人協(xié)作的工作模式通常是這樣:
- 首先,可以試圖用
git push origin branch-name推送自己的修改; - 如果推送失敗,則因為遠(yuǎn)程分支比你的本地更新,需要先用
git pull試圖合并; - 如果合并有沖突,則解決沖突,并在本地提交;
- 沒有沖突或者解決掉沖突后,再用
git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name。
20.Git取消跟蹤某個文件
git rm --cached FILENAME
如果是文件夾
git rm -r --cached FOLDER/.