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