Git教程筆記
教程鏈接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
創(chuàng)建版本庫
-
git init: 初始化一個Git倉庫,將當(dāng)前目錄變?yōu)镚it管理的倉庫 -
git add <filename>:把文件添加到倉庫(stage中),可以反復(fù)多次使用,添加多個文件 -
git commit -m "版本描述":完成,添加注釋,把文件按提交到倉庫
時光機穿梭
-
git status:隨時掌握工作區(qū)的當(dāng)前狀態(tài) -
git diff <filename>:如果git status告訴你文件被修改過,查看修改的內(nèi)容使用
git reset --hard commit_idHEAD指向的版本就是當(dāng)前的版本,因此,Git允許我在版本的歷史之間穿梭,使用如下命令
版本回退
-
git log:穿梭前,可以查看提交歷史,以便確定要退回到哪個版本,顯示從最近到最遠的提交日志 -
git log --pretty=oneline:以單行形式顯示提交日志 -
git reset --hard commit_id:回退/前進到commit_id指向的版本 -
git reset --hard HEAD^:當(dāng)修改錯了工作區(qū)某個文件的內(nèi)容,還使用了git add將文件添加到了暫存區(qū)時,想丟棄修改,回退到上一版本 -
git reflog:要重返未來,查看各個版本的commit_id,以便確定要回到未來哪個版本
管理修改
- git 管理的是修改,而非文件。
- 第一次修改 -> git add -> 第二次修改 -> git commit
撤銷修改
-
git checkout -- <filename>:丟棄工作區(qū)的修改,返回最近一次add/commit時的文件狀態(tài) -
git reset HEAD <filename>:丟棄暫存區(qū)的修改
刪除文件
-
git rm <filename>:從版本庫中刪除文件
遠程倉庫
添加遠程庫
- 登陸GitHub,“Create a new repository”
- 添加遠程庫:
git remote add origin git@github.com:<username>/<repository name>.git - 推送并關(guān)聯(lián)本地master分支:
git push -u origin master - 提交master分支修改到遠程庫:
git push origin master
從遠程庫克隆
git clone git@github.com:<username>/<repository name>.git- GitHub支持ssh/https協(xié)議
分支管理
創(chuàng)建和合并分支
-
git branch <name>:創(chuàng)建分支 -
git branch:查看分支 -
git checkout <name>:切換分支 -
git checkout -b <name>:創(chuàng)建+切換分支 -
git merge <name>:合并某分支到當(dāng)前分支 -
git branch -d <name>:刪除分支
解決沖突
- 當(dāng)Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成
-
git log --graph:看到分支合并圖 -
git log --graph --pretty=oneline --abbrev-commit單行顯示分支合并圖
分支管理策略
-
git merge <name>:fast forward模式合并,刪除分支,分支信息被丟棄 -
git merge --no-ff:普通模式合并,合并后歷史有分支,可通過git log --graph看到分支合并記錄
Bug分支
-
git stash:儲存當(dāng)前工作現(xiàn)場 -
git stash list:列出所有stash -
git stash apply:恢復(fù)最近一次儲存的stash -
git stash drop:刪除最近一次儲存的stash -
git stash pop:恢復(fù)+刪除最近一次stash -
git stash stash@{num}:恢復(fù)指定stash
feature分支
-
git branch -D <name>:強行刪除沒有被合并的分支
多人協(xié)作
-
git remote -v:查看遠程庫的詳細信息 -
git checkout -b dev origin/dev:創(chuàng)建遠程origin的dev分支到本地 -
git branch --set-upstream dev origin/dev:建立本地分支和遠程分支的關(guān)聯(lián) -
git pull:抓取遠程的新提交 -
git push origin branch-name:把分支上的所有本地提交推送到遠程庫,。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應(yīng)的遠程分支上
標(biāo)簽管理
- 是指向某個commit的指針
- 標(biāo)簽不能移動
- 創(chuàng)建和刪除標(biāo)簽都是瞬間完成的
創(chuàng)建標(biāo)簽
eg:git tag v1.0-
git tag:列出所有標(biāo)簽(按字母排序) -
git tag <tagname>:新建一個標(biāo)簽,默認(rèn)為HEAD,也可以指定一個commit id -
git tag -a <tagname> -m "description":指定標(biāo)簽信息 -
git tag -s <tagname> -m "description...:"通過-s用私鑰簽名一個標(biāo)簽 -
git show <tagname>:查看標(biāo)簽信息
操作標(biāo)簽
-
git push origin <tagname>:推送本地標(biāo)簽到遠程庫 -
git push origin --tags:推送全部未推送過的本地標(biāo)簽 -
git tag -d <tagname>:刪除本地標(biāo)簽 -
git push origin :refs/tags/<tagname>:刪除遠程標(biāo)簽
如果要刪除遠程標(biāo)簽就得先刪除本地標(biāo)簽,再從遠程刪除。
使用GitHub
- 自己擁有
Fork后的倉庫的讀寫權(quán)限 - 可以推送
pull request給官方倉庫來貢獻代碼
自定義Git
-
git config --global color.ui true:讓Git顯示顏色
忽略特殊文件
-
.gitignore:配置要忽略的文件 -
這里 可以在線瀏覽各種配置文件,無需從頭寫
.gitignore文件
配置別名
- 別名是命令的縮寫
- 例子:
-
git config --global alias.st status:配置status別名為st -
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.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit":
-
- 配置文件:
-
.git/config:倉庫的Git配置文件 -
.gitconfig:當(dāng)前用戶的Git配置文件,放在用戶主目錄下
-
搭建Git服務(wù)器
- 安裝git:
sudo apt-get install git - 創(chuàng)建git用戶:
sudo adduser git - 創(chuàng)建證書登錄:搜集登陸用戶公鑰(id_rsa.pub)文件,導(dǎo)入
/home/git/.ssh/authorized_keys文件,一行一個 - 初始化Git倉庫
sudo git init --bare sample.git-
sudo chown R git:git sample.git:修改裸倉庫owner,防止其他用戶篡改工作區(qū)
- 禁用shell登陸(git-shell一登陸就自動退出)
vi /etc/passwd-
git:x:........:/bin/bash-->git:x:......:/usr/bin/git-shell
- 克隆遠程倉庫,本地運行,修改后推送
git clone git@server:/srv/sample.gitgit push
- 要方便管理公鑰,用Gitosis
- 要像SVN那樣變態(tài)地控制權(quán)限,用Gitolite