Git簡介
安裝Git
$ git config --global suer.name "pony"
創建版本庫
創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄(確保目錄名不包含中文)
$ cd D:/doc/
$ mkdir learngit
$ cd learngit/
$ pwd
git init
命令把這個目錄變成Git可以管理的倉庫
$ git init
[master (root-commit) bd23402]1 file changed, 2 insertions(create mode 100644 readme.txt
4、為什么有add和commit?
時光機穿梭
查看狀態
-
要隨時掌握工作區的狀態,使用
git status命令。 -
如果
git status告訴你有文件被修改過,用git diff可以查看修改內容。
版本回退
-
HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。 -
穿梭前,用
git log可以查看提交歷史,以便確定要回退到哪個版本。 -
要重返未來,用
git reflog查看命令歷史,以便確定要回到未來的哪個版本。
工作區和緩存區
管理修改
add
到暫存區,那就不會加入到
commit
中
git diff HEAD -- readme.txt
命令可以查看工作區和版本庫里面最新版本的區別
撤銷修改
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
刪除文件
$ git checkout -- test.txt
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt" [master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt
遠程倉庫
GitHub
id_rsa
和
id_rsa.pub
這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:
$ ssh-keygen -t rsa -C "lingzeng86@126.com"
.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。id_rsa.pub
文件的內容,就可以了。
添加遠程庫
The authenticity of host 'github.com (192.30.253.113)' can't be established.RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.Counting objects: 20, done.Delta compression using up to 4 threads.Compressing objects: 100% (15/15), done.Writing objects: 100% (20/20), 1.65 KiB | 0 bytes/s, done.Total 20 (delta 4), reused 0 (delta 0)remote: Resolving deltas: 100% (4/4), done.To git@github.com:zenglingming/learngit.git* [new branch] master -> masterBranch master set up to track remote branch master from origin.
git push
命令,實際上是把當前分支
master
推送到遠程。
由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master
master
分支的最新修改推送至GitHub,現在,你就擁有了真正的分布式版本庫!
從遠程庫克隆
分支管理
創建與合並分支
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合並某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
解決沖突
git log
也可以看到分支的合並情況:
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
分支管理策略
Git分支十分強大,在團隊開發中應該充分應用。
合並分支時,加上--no-ff參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而默認的fast forward合並就看不出來曾經做過合並。
Bug分支
git status
查看工作區,就是干凈的(除非有沒有被Git管理的文件)
git stash apply
恢復,但是恢復后,stash內容並不刪除,你需要用
git stash drop
來刪除
git stash pop
,恢復的同時把stash內容也刪了
$ git stash list $ git stash apply stash@{0}
