一.創建版本庫
①初始化一個Git倉庫:git init
②添加文件到Git倉庫:1.git add<file> ; 2.git commit
二.時光機穿梭
①查看工作區狀態,文件是否被修改過:git status
②查看修改的內容:git diff
1.版本回退
①HEAD:當前版本
②HEAD^:上個版本
③定位版本:git reset --hard commit_id
④git log:穿梭前,用git log
可以查看提交歷史,以便確定要回退到哪個版本
⑤git reflog:要重返未來,用git reflog
查看命令歷史,以便確定要回到未來的哪個版本。
2.工作區和暫存區
①工作區:就是你在電腦里能看到的目錄,比如我的learngit
文件夾就是一個工作區
②版本庫:工作區有一個隱藏目錄.git
,這個不算工作區,而是Git的版本庫。
③暫存區:Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區。
第一步是用git add
把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit
提交更改,實際上就是把暫存區的所有內容提交到當前分支。
3.管理修改
①每次修改,如果不add到暫存區,就不會加入到commit中
4.撤銷修改
①git checkout -- file:丟棄工作區的修改
②git reset HEAD file:把暫存區的修改撤銷掉,重新放回工作區
5.刪除文件
①git rm:從版本庫中刪除文件
三.遠程倉庫
1.添加遠程庫
①關聯一個遠程庫:git remote add origin git@server-name:path/repo-name.git
②關聯后第一次推送master分支的所有內容:git push -u origin master
③此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改
ps:由於遠程庫是空的,我們第一次推送master
分支時,加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
2.從遠程庫克隆
①要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone
命令克隆
②Git支持多種協議,包括https
,但通過ssh
支持的原生git
協議速度最快
四.分支管理
1.創建與合並分支
①查看分支:git branch
②創建分支:git branch<name>
③切換分支:git cheakout<name>
④創建+切換分支:git cheakout -b <name>
⑤合並某分支到當前分支:git merge<name>
⑥刪除分支:git branch - d <name>
2.解決沖突
①查看分支合並圖:git log -- graph
eg:git log --graph --pretty =oneline --abbrev -commit
3.分支管理策略
①合並分支時加--no-ff參數:普通模式合並,合並后的歷史有分支,禁用fast forward
eg:git log --no-ff-m"merge with no--ff"dev
4.Bug分支
①git stash:把當前工作現場隱藏起來,去修復bug
②git stash pop:恢復工作現場同時刪除stash內容
5.Feature分支
①開發一個新feature,最好新建一個分支;
②如果要丟棄一個沒有被合並過的分支,可以通過git branch -D <name>
強行刪除
6.多人協作
①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:建立本地分支和遠程分支的關聯
五.標簽管理
1.創建標簽
①git tag <name>:新建一個標簽(默認為HEAD,也可以指定commit id)
②git tag -a <tagname> -m "blablabla...":可以指定標簽信息
③git tag -s <tagname> -m "blablabla...":可以用PGP簽名信息
④git tag:查看所有標簽
2.操作標簽
①git push origin <tagname>:推送一個本地標簽
②git push origin --tags:推送全部未推送過的本地標簽
③git tag -d <tagname>:刪除一個本地標簽
④git push origin :refs/tags/<tagname>:刪除一個遠程標簽
六.使用GitHub
①在GitHub上,可以任意Fork開源倉庫;
②自己擁有Fork后的倉庫的讀寫權限;
③可以推送pull request給官方倉庫來貢獻代碼。
七.自定義Git
1.忽略特殊文件
①忽略某些文件時,需要編寫.gitignore
;
2.配置別名
①我們只需要敲一行命令,告訴Git,以后
st
就表示status
:git config --global alias.st status
eg:
$ 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"
3.搭建Git服務器
GitHub就是一個免費托管開源代碼的遠程倉庫。但是對於某些視源代碼如生命的商業公司來說,既不想公開源代碼,又舍不得給GitHub交保護費,那就只能自己搭建一台Git服務器作為私有倉庫使用。
例如大眾點評code.dianpingoa.com