Git教程筆記
教程鏈接:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
創建版本庫
-
git init
: 初始化一個Git倉庫,將當前目錄變為Git管理的倉庫 -
git add <filename>
:把文件添加到倉庫(stage中),可以反復多次使用,添加多個文件 -
git commit -m "版本描述"
:完成,添加注釋,把文件按提交到倉庫
時光機穿梭
-
git status
:隨時掌握工作區的當前狀態 -
git diff <filename>
:如果git status告訴你文件被修改過,查看修改的內容使用
git reset --hard commit_id
HEAD指向的版本就是當前的版本,因此,Git允許我在版本的歷史之間穿梭,使用如下命令
版本回退
-
git log
:穿梭前,可以查看提交歷史,以便確定要退回到哪個版本,顯示從最近到最遠的提交日志 -
git log --pretty=oneline
:以單行形式顯示提交日志 -
git reset --hard commit_id
:回退/前進到commit_id指向的版本 -
git reset --hard HEAD^
:當修改錯了工作區某個文件的內容,還使用了git add
將文件添加到了暫存區時,想丟棄修改,回退到上一版本 -
git reflog
:要重返未來,查看各個版本的commit_id,以便確定要回到未來哪個版本
管理修改
- git 管理的是修改,而非文件。
- 第一次修改 -> git add -> 第二次修改 -> git commit
撤銷修改
-
git checkout -- <filename>
:丟棄工作區的修改,返回最近一次add/commit時的文件狀態 -
git reset HEAD <filename>
:丟棄暫存區的修改
刪除文件
-
git rm <filename>
:從版本庫中刪除文件
遠程倉庫
添加遠程庫
- 登陸GitHub,“Create a new repository”
- 添加遠程庫:
git remote add origin git@github.com:<username>/<repository name>.git
- 推送并關聯本地master分支:
git push -u origin master
- 提交master分支修改到遠程庫:
git push origin master
從遠程庫克隆
git clone git@github.com:<username>/<repository name>.git
- GitHub支持ssh/https協議
分支管理
創建和合并分支
-
git branch <name>
:創建分支 -
git branch
:查看分支 -
git checkout <name>
:切換分支 -
git checkout -b <name>
:創建+切換分支 -
git merge <name>
:合并某分支到當前分支 -
git branch -d <name>
:刪除分支
解決沖突
- 當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
:儲存當前工作現場 -
git stash list
:列出所有stash -
git stash apply
:恢復最近一次儲存的stash -
git stash drop
:刪除最近一次儲存的stash -
git stash pop
:恢復+刪除最近一次stash -
git stash stash@{num}
:恢復指定stash
feature分支
-
git branch -D <name>
:強行刪除沒有被合并的分支
多人協作
-
git remote -v
:查看遠程庫的詳細信息 -
git checkout -b dev origin/dev
:創建遠程origin的dev分支到本地 -
git branch --set-upstream dev origin/dev
:建立本地分支和遠程分支的關聯 -
git pull
:抓取遠程的新提交 -
git push origin branch-name
:把分支上的所有本地提交推送到遠程庫,。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上
標簽管理
- 是指向某個commit的指針
- 標簽不能移動
- 創建和刪除標簽都是瞬間完成的
創建標簽
eg:git tag v1.0
-
git tag
:列出所有標簽(按字母排序) -
git tag <tagname>
:新建一個標簽,默認為HEAD,也可以指定一個commit id -
git tag -a <tagname> -m "description":
指定標簽信息 -
git tag -s <tagname> -m "description...:"
通過-s用私鑰簽名一個標簽 -
git show <tagname>
:查看標簽信息
操作標簽
-
git push origin <tagname>
:推送本地標簽到遠程庫 -
git push origin --tags
:推送全部未推送過的本地標簽 -
git tag -d <tagname>
:刪除本地標簽 -
git push origin :refs/tags/<tagname>
:刪除遠程標簽
如果要刪除遠程標簽就得先刪除本地標簽,再從遠程刪除。
使用GitHub
- 自己擁有
Fork
后的倉庫的讀寫權限 - 可以推送
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
:當前用戶的Git配置文件,放在用戶主目錄下
-
搭建Git服務器
- 安裝git:
sudo apt-get install git
- 創建git用戶:
sudo adduser git
- 創建證書登錄:搜集登陸用戶公鑰(id_rsa.pub)文件,導入
/home/git/.ssh/authorized_keys
文件,一行一個 - 初始化Git倉庫
sudo git init --bare sample.git
-
sudo chown R git:git sample.git
:修改裸倉庫owner,防止其他用戶篡改工作區
- 禁用shell登陸(git-shell一登陸就自動退出)
vi /etc/passwd
-
git:x:........:/bin/bash
-->git:x:......:/usr/bin/git-shell
- 克隆遠程倉庫,本地運行,修改后推送
git clone git@server:/srv/sample.git
git push
- 要方便管理公鑰,用Gitosis
- 要像SVN那樣變態地控制權限,用Gitolite