學會這些命令,你就可以熟練的使用Git工具了,什麼?想精通,那是不可能的。
基本上,Git就是以下面的命令順序學習的。文中筆記是從廖雪峰老師的Git教程中總結出來的,方面查閱命令。詳細原理請看Git教程。
1、基礎
git config --global user.name "Your Name"
設定你的倉庫使用者名稱(用於標識提交者)
git config --global user.email "email@example.com"
設定你的倉庫郵箱(用於標識提交者)
git init
初始化一個git倉庫
git add --all
新增所有更改的檔案
git add filename1
當然可以指定新增filename1
git commit -m "commit message"
新增更改的資訊,必須要有,不然報錯,不建議不加。
git status
檢視git當前狀態
git diff filename1
檢視filename1到底修改了哪些內容
git log
檢視最近的提交日誌
git log --pretty=oneline
單行顯示提交日誌
git reset --hard commitID
利用git log
得到的commitID返回版本
git reset --hard HEAD^
回到上一個版本
git reflog
檢視命令的歷史,可以找到git log
看不到的commitID,因為git log
只顯示當前的提交日誌,如果你提交了一次,退回版本後又後悔了,就能檢視上次提交的commitID
git checkout -- filename1
利用版本庫中的版本替換工作區中的檔案。功能有2:
- 撤銷檔案修改,分兩種情況:
- 撤銷工作區中的修改(沒有使用
git add
命令新增到暫存區)
- 撤銷暫存區中的修改(新增到了暫存區又做了修改)
- 找回刪除的檔案
git reset HEAD filename1
撤銷add,回到工作區
git rm filename1
刪除檔案
git remote add origin https://github.com/pengloo53/learngit.git
將本地庫關聯到github遠端庫上
git push -u origin master
第一次推送的時候要加上-u
引數,可以將本地庫的master分支與遠端庫的master分支關聯起來;下次提交就不需要加-u
了。
git clone https://github.com/pengloo53/learngit.git
克隆遠端庫到本地
2、分支管理
git checkout -b dev
建立dev分支並切換到dev。相當於git branch dev
、git checkout dev
兩條命令。
git branch
檢視當前分支
git merge dev
合併指定分支到當前分支,如,你現在master分支,那麼執行命令就將dev分支合併到了master分支上。
git branch -d dev
刪除dev分支
git log --graph --pretty=oneline --abbrev-commit
檢視分支合併圖
git merge --no-ff -m "merge with no-ff" dev
禁用「Fast forward」,也就是保留分支的相關資訊。
git stash
將工作區現場儲藏起來,等以後恢復後繼續工作。通常用於處理更為著急的任務時,例如:bug。
git stash list
檢視儲存的工作現場
git stash apply
恢復工作現場
git stash drop
刪除stash內容
git stash pop
恢復的同時直接刪除stash內容
git stash apply stash@{0}
恢復指定的工作現場,當你儲存了不只一份工作現場時。
git branch -D feature-vulcan
強行刪除分支。用於不需要合併,就地刪除的情況。
git remote
檢視遠端庫的資訊,一般返回origin。
git remote -v
檢視遠端庫的詳細資訊。
git push origin master
將本地master分支推送到遠端master分支。
- master分支為主分支,因此要時刻與遠端同步;
- dev分支為開發分支,團隊成員都需要在上面工作,所以也需要與遠端同步;
- bug分支只用於在本地修復bug,沒有必要推送到遠端;
- feature新功能分支是否推送到遠端,取決於你是否和其他人合作在上面開發。
git clone https://github.com/pengloo53/learngit.git
將遠端庫克隆到本地,預設只能看到master分支。
git checkout -b dev origin/dev
建立遠端dev分支到本地
git pull
將遠端分支的最新內容抓取下來。
git branch --set-upstream dev origin/dev
將本地dev分支與遠端dev分支之間建立連結。
多人協作工作模式
- 首先,可以試圖用
git push origin branch-name
推送自己的修改;
- 如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併(如果git pull提示“no tracking information”,則說明本地分支和遠端分支的連結關係沒有建立,用命令
git branch --set-upstream branch-name origin/branch-name
);
- 如果合併有衝突,則解決衝突,並在本地提交;
- 沒有衝突或者解決掉衝突後,再用
git push origin branch-name
推送就能成功!
3、標籤管理
git tag v1.0
給當前分支打上標籤
git tag
檢視所有的標籤,按時間順序列出。
git log --pretty=oneline --abbrev-commit
縮略commitID並單行顯示提交資訊
git tag v0.9 commitID
通過上一條命令檢視commitID,然後打上標籤。用於忘記打標籤的情況,因為標籤其實就是隻想某個commitID的指標,預設情況下,標籤打在最新的提交上。
git show v0.9
檢視標籤資訊。
git tag -a v0.1 -m "version 0.1 released" commitID
建立帶有說明的標籤,-a
指定標籤名,-m
指定說明文字。
git tag -d v0.1
刪除標籤v0.1
git push origin v1.0
推送標籤1.0到遠端
git push origin --tags
推送所有的標籤到遠端
git push origin :refs/tags/v0.9
刪除遠端標籤,但是前提是要先在本地刪除對應標籤。
4、自定義Git
git config --global color.ui true
讓Git顯示顏色
.gitignore
在這個檔案裡編輯你要忽略的檔案,並提交到Git中,就可以忽略特殊檔案的檢查。如將*.db
寫入.gitignore
檔案中,將忽略所有db檔案。可以參考github收集的所有.gitignore
git config --global alias.st status
將status的別名設定成st,那麼git st
=git status
。
git config --global alias.unstage 'reset HEAD'
那麼git reset HEAD filename
=git unstage filename
git config --global alias.last 'log -1'
敲git last
就顯示最後一次提交了。
5、搭建Git伺服器
sudo apt-get install git
安裝Git;
sudo adduser git
新增Git使用者;
sudo git init --bare sample.git
初始化git倉庫;
sudo chown -R git:git sample.git
修改倉庫的所屬使用者為git;
- 將git使用者的資訊
git:x:1001:1001:,,,:/home/git:/bin/bash
改成git:x:1001:1001:,,,:/home/git:/bin/git-shell
,為了禁用shell登入。
git clone git@server:/director/sample.git
克隆Git伺服器上的倉庫
PS. 想方便管理公鑰,用Gitosis;想控制許可權,用Gitolite。