Git 常用命令總結

魯鵬發表於2014-05-21

學會這些命令,你就可以熟練的使用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 devgit 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分支之間建立連結。
多人協作工作模式
  1. 首先,可以試圖用git push origin branch-name推送自己的修改;
  2. 如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併(如果git pull提示“no tracking information”,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream branch-name origin/branch-name);
  3. 如果合併有衝突,則解決衝突,並在本地提交;
  4. 沒有衝突或者解決掉衝突後,再用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伺服器

  1. sudo apt-get install git 安裝Git;
  2. sudo adduser git 新增Git使用者;
  3. sudo git init --bare sample.git 初始化git倉庫;
  4. sudo chown -R git:git sample.git修改倉庫的所屬使用者為git;
  5. 將git使用者的資訊git:x:1001:1001:,,,:/home/git:/bin/bash改成git:x:1001:1001:,,,:/home/git:/bin/git-shell,為了禁用shell登入。
  6. git clone git@server:/director/sample.git 克隆Git伺服器上的倉庫

PS. 想方便管理公鑰,用Gitosis;想控制許可權,用Gitolite