Git學習筆記
1、Git 的本地倉庫創建與使用
a)在安裝好git后,到所需要管理的目錄下,
初始化一個Git倉庫,使用git init
命令。
添加文件到Git倉庫,分兩步:
-
第一步,使用命令
git add <file>
,注意,可反復多次使用,添加多個文件; //此時,文件修改只是保存到了暫存區 - 第二步,使用命令
git commit -m
,完成。 //git commit 之后,修改會同步到git分支,git commit只同步暫存區的版本
b)
-
要隨時掌握工作區的狀態,使用
git status
命令。 -
如果
git status
告訴你有文件被修改過,用git diff <filename>
可以查看修改內容。
c)
-
HEAD
指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id(HEAD^ 指的是上一個版本)
。 -
穿梭前,用
git log
可以查看提交歷史,以便確定要回退到哪個版本。(git log --prrety=oneline ) -
要重返未來,用
git reflog
查看命令歷史,以便確定要回到未來的哪個版本。
d) 撤銷修改:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file
,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
e)刪除文件:
當刪除本地文件后,版本庫中的文件可以用git rm file刪除,如果想回復的話,使用git checkout -- file還原。
ps:你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容。
2、Git的遠程倉庫使用
a) 創建ssh key, 使用ssh-keygen -t rsa -C "youremail@example.com" 命令,將用戶主目錄下生成的id_rsa.pub公鑰內容復制到傲github中,就可以使用免費的github倉庫了。
b)要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git
;查詢遠程倉庫的命令:git remote -v
關聯后,使用命令git push -u origin master
第一次推送master分支的所有內容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
c)克隆遠程庫
要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone
命令克隆。
Git支持多種協議,包括https
,但通過ssh
支持的原生git
協議速度最快。
3、分支管理
a)
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合並某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
b)解決沖突:
當Git無法自動合並分支時,就必須首先解決沖突。解決沖突后,再提交,合並完成。
用git log --graph
命令可以看到分支合並圖。
c)分支策略
首先,master
分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是說,dev
分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev
分支合並到master
上,在master
分支發布1.0版本;
你和你的小伙伴們每個人都在dev
分支上干活,每個人都有自己的分支,時不時地往dev
分支上合並就可以了。
所以,團隊合作的分支看起來就像這樣:
ps:合並分支時,加上--no-ff
參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而fast forward
合並就看不出來曾經做過合並。
d)bug分支:
修復bug時,我們會通過創建新的bug分支進行修復,然后合並,最后刪除;
當手頭工作沒有完成時,先把工作現場git stash
一下,然后去修復bug,修復后,再git stash pop
,回到工作現場。當 git stash list不止一個時,可以用git stash apply stash(id)回到指定場所,但是不會刪除list中的內容。可以用git stash drop命令刪除
e)Feture 分支:
開發一個新feature,最好新建一個分支;
如果要丟棄一個沒有被合並過的分支,可以通過git branch -D <name>
強行刪除。
f)多人協作
-
查看遠程庫信息,使用
git remote -v
; -
本地新建的分支如果不推送到遠程,對其他人就是不可見的;
-
從本地推送分支,使用
git push origin branch-name
,如果推送失敗,先用git pull
抓取遠程的新提交; -
在本地創建和遠程分支對應的分支,使用
git checkout -b branch-name origin/branch-name
,本地和遠程分支的名稱最好一致; -
建立本地分支和遠程分支的關聯,使用
git branch --set-upstream branch-name origin/branch-name
; -
從遠程抓取分支,使用
git pull
,如果有沖突,要先處理沖突。
4、標簽管理:(Git的標簽雖然是版本庫的快照,但其實它就是指向某個commit的指針(跟分支很像對不對?但是分支可以移動,標簽不能移動),所以,創建和刪除標簽都是瞬間完成的。)
a)創建標簽:
-
命令
git tag <name>
用於新建一個標簽,默認為HEAD
,也可以指定一個commit id; -
git tag -a <tagname> -m "blablabla..."
可以指定標簽信息;(git show tagname可以查看到標簽信息) -
git tag -s <tagname> -m "blablabla..."
可以用PGP簽名標簽; -
命令
git tag
可以查看所有標簽。
b)標簽操作:
-
命令
git push origin <tagname>
可以推送一個本地標簽; -
命令
git push origin --tags
可以推送全部未推送過的本地標簽; -
命令
git tag -d <tagname>
可以刪除一個本地標簽; -
命令
git push origin :refs/tags/<tagname>
可以刪除一個遠程標簽。
5、使用Github
-
在GitHub上,可以任意Fork開源倉庫;
-
自己擁有Fork后的倉庫的讀寫權限;
-
可以推送pull request給官方倉庫來貢獻代碼。
6、自定義Git
a)git config --global color.ui true 可以使Git顯示顏色
b)
-
忽略某些文件時,需要編寫
.gitignore
; -
.gitignore
文件本身要放到版本庫里,並且可以對.gitignore
做版本管理! - 不需要從頭寫
.gitignore
文件,GitHub已經為我們准備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore
c)配置別名:
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置Git的時候,加上--global
是針對當前用戶起作用的,如果不加,那只針對當前的倉庫起作用。
配置文件放哪了?每個倉庫的Git配置文件都放在.git/config
文件中,而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig
中。
7、搭建Git服務器,參考網址
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000