Git教程

Git教程

Git基礎

直接快照,而非保存差異

其他版本管理在每個版本記錄每個文件與上一版本的差異信息。而git每個版本直接快照每個文件,如果文件未被修改則記錄鏈接到上一快照的鏈接。比較差異則是比較兩次快照。

文件狀態管理

文件狀態:未跟蹤,已提交,已修改,已暫存。
文件區域:本地數據目錄,工作目錄,暫存區

Created with Raphaël 2.1.0未跟蹤文件未跟蹤文件已暫存文件已暫存文件已修改文件已修改文件已提交文件已提交文件git add做快照(保存到暫存區)移除提交(將暫存區快照轉儲到數據目錄)修改

git使用

初始化

配置信息分爲系統級、用戶級、倉庫級。其中系統級配置文件在操作系統或安裝目錄的/etc/gitconfig中,用戶級在操作系統的user/.gitconfig中,倉庫級則在改倉庫的.it/gitconfit中。
1. 在需要進行版本管理的倉庫根目錄下運行git init(之後的命令一般都在此目錄下運行)
該命令會在目錄下創建.git文件夾,其中包含配置信息等文件。
1. 表明身份
運行命令git config user.email "[email protected]"來指明郵箱地址
運行命令git config user.name "UserName"來指明稱呼

注意該命令表明的身份僅在該倉庫下有效,所保存的user信息也只在該目錄下的.git/config文件中。
如果是git config --global user.email "xxxx"git config --global user.name "xxxx"則在本電腦中本用戶下有效,配置信息也將保存到操作系統下的user目錄下。
1. 指定默認文本編輯器(可選)
1. 指定差異分析工具(可選)
1. 查看配置信息
- 使用git config --list命令來查看配置信息。
如果看到同一個配置出現多次,則表示它可能在系統級或用戶級均有設置,在本git倉庫中只有最後一個生效。
- 使用git config user.name命令來查看指定配置信息

git add將文件添加到版本控制(跟蹤文件)

  1. git add filename添加指定未跟蹤文件到版本控制,或添加跟蹤後已修改文件到暫存區
  2. git add .添加該目錄下所有文件到版本控制

git commit提交修改

  1. git commit不帶參數時會打開默認文本編輯器讓輸入提交說明(可以指定編輯器)
  2. git commit -m "infomation"帶描述信息提交修改
  3. git commit -m "infomation -a"自動將已跟蹤文件暫存,並提交修改
  4. git commit --amend將暫存區補交到上一次提交
    提交暫存區的信息。如果修改後未進行git add,則該修改不會被提交。

git clone從現有倉庫克隆

  1. git clone git://github.com/schacon/grit.git會在當前目錄下創建一個grit文件夾,裏面就是克隆下來的倉庫了。
  2. git clone git://github.com/schacon/grit.git mydir較上面那個命令,將girt文件夾改名爲mydir

git status倉庫狀態

  1. 執行git status命令後會返回一些信息,內容如下
    • Untracked files 列出未跟蹤文件
    • Changes to be committed 列出已暫存需要被提交文件(當存在未跟蹤文件時不顯示此信息)
    • Changes not staged for commit 暫存或提交後被修改文件

忽略某些文件

創建.gitignore文件,將需要忽略的文件寫在.gitignore中即可。
1. 支持簡化正則表達式(*[]?
1. 以#開頭表示該行爲註釋
1. 以/結尾表示忽略改文件夾

git diff比較差異

  1. git diff不加參數時比較的是未暫存和已暫存的快照差異
  2. git diff -cached比較的是已暫存和已提交的快照差異(同git diff -staged

git rm從git移除某個文件

  1. git rm filename將filename從暫存區移除(從版本管理移除)
  2. git rm filename -f如果要移除的文件修改過並add到暫存區,則需要加上-f參數
    注:上兩條命令會將文件從本地刪除
  3. git rm filename --cached從版本控制移除,但不刪除文件(之後需要手動添加到.gitignore
  4. 此命令中的文件名參數支持簡化正則表達式

git mv移動或重命名某個文件

  1. git mv file to new重命名“file”爲“new”
    重命名會同時將文件重命名
    直接在外面修改文件名,再git status提示舊文件被刪除,新文件未跟蹤;再git add .之後提示文件重命名

git log查看提交歷史(未完整)

  1. git log顯示歷史記錄
  2. git log -2顯示最新兩次提交
  3. git log -p顯示帶內容差異的歷史記錄
  4. git log --name-only增加顯示文件名
  5. git log --name-status增加顯示文件名即文件操作
  6. git log --stat顯示帶增刪行數的歷史記錄
  7. git log --shortstat相對--stat不顯示具體每個文件情況
  8. git log --pretty=oneline每個提交信息在一行中顯示
  9. git log --pretty=short不帶日期
  10. git log --pretty=fullgit log
  11. git log --pretty=fuller增加提交人和提交時間
  12. git log --pretty=format:"%h - %an, %ar : %s"指定log格式
    • %H提交對象哈希串(完整)
    • %h提交對象哈希串(簡短)
    • %T樹對象的哈希串(完整)
    • %t樹對象的哈希串(簡短)
    • %P父對象的哈希串(完整)
    • %p父對象的哈希串(簡短)
    • %an作者名字
    • %ae作者郵件
    • %ad作者修訂日期,可用-date=定製格式
    • %ar作者修訂日期,按多久以前的格式
    • %cn提交者名字
    • %ce提交者郵件
    • %cd提交日期,可用-date=定製格式
    • %cr提交日期,按多久以前的格式
    • %s提交說明
  13. git log --graph顯示每個提交所在分支及分支的分化合並情況,推薦在單行情況下使用該參數
  14. 信息顯示不完時會進入控制模式
    • q退出
    • 顯示下一行

git reset

  1. git reset HEAD filename從暫存區取消filename
  2. git reset HEAD~3向回移動HEAD三個提交
    回退到歷史注意記住當前commit的id,便於移動HEAD到將來
  3. git reset HEAD~向回移動HEAD一個提交(同上)
  4. git reset sha_id移動HEAD到指定commitID

git checkout之取消對文件的修改

  1. git checkout -- filename取消對文件filename的修改

遠程倉庫

git remote查看遠程倉庫

  1. git remote查看遠程倉庫
  2. git remote -v查看倉庫對應的地址(同--verbose)
  3. git remote add origin giturl.git添加遠程倉庫giturl.git簡稱origin
  4. git remote show origin查看遠程origin倉庫的信息
  5. git remote rename pb pa將遠程倉庫pb重命名爲pa
  6. git remote rm pb將遠程倉庫pb移除

git fetch從遠程倉庫抓取數據

  1. git fetch xxxx從遠程倉庫xxxx抓取數據(只是將遠端數據拉倒本地,並不自動合併到當前工作分支)

git pull從遠程倉庫抓取數據

git push推送數據到遠程

  1. git push origin master推送master分支到origin倉庫
  2. git push origin v1.5推送標籤v1.5到遠程origin倉庫
  3. git push origin --tags推送所有標籤到遠程origin倉庫

git tag打標籤

  1. git tag xxx創建一個不帶附註的輕量級標籤(不推薦)
  2. git tag -a xxx -m "yyy"創建一個附註爲yyy的標籤xxx
  3. git tag -s xxx -m "yyy"創建並使用私鑰簽署標籤
  4. git tag -v xxx使用簽署者的公鑰驗證已簽署的xxx標籤
  5. git tag查看現有標籤
  6. git tag -l “v1.4.2.*”查看所有v1.4.2開頭的標籤
  7. git tag -a xxx yyyyyy -m "zzzz"爲以前的提交打標籤。yyyyy爲需要假標籤的提交的校驗和,xxx爲標籤名,zzz爲說明

git show顯示當前信息

  1. git show顯示最後一次提交信息
  2. git show xxx顯示標籤爲xxx的提交信息

git技巧

自動補全

命令別名

本地分支

分支結構

  1. HEAD指針指向當前工作分支
  2. 分支指針指向該分支最後一次提交的commit對象
  3. commit對象包括
    • 指向上一次提交對象的parent指針(第一次提交沒有)
    • 作者信息
    • 提交者信息
    • 指向提交文件目錄樹的指針
  4. 提交文件目錄樹
    • 一個目錄樹爲一個Tree對象
    • 包括該目錄下的文件快照和子目錄樹對象
  5. 文件快照
    • 一個文件快照爲一個blob對象

git branch管理分支

  1. git branch列出當前所有分支(當前工作分支前有*
  2. git branch -v帶最後一次提交信息的分支列表
  3. git branch --merge查看那些分支已經與當前分支合併
  4. git branch --no-merge查看那些分支未與當前分支合併
  5. git branch name在當前commit對象創建一個name分支
    創建分支並不會影響當前工作分支,需要手動將工作分支切換到新建的分支
  6. git branch -d name刪除name分支
  7. git branch -D name強制刪除name分支(比如name分支未合併時只能強制刪除)

git checkout之切換工作分支

  1. git checkout name將工作分支切換到name分支(讓HEAD指針指向name分支,將工作目錄中的文件替換爲name分支指向的文件快照內容)
  2. git checkout -b name新建並切換到name分支

git merge合併分支

  1. git merge name合併name分支到當前工作分支

遠程分支

git fetch抓取遠程倉庫

git clone命令在本地建立記錄遠程分支的origin/master,與本地master分支
1.git fetch origin抓取遠程倉庫origin的master分支,更新本地記錄的遠程分支origin/master

git rebase衍合(未完整)

  1. git rebase master將master分支上提交的修改(從公共parent開始),在當前工作分支上重做一遍

將已有代碼提交到github

  1. 添加.gitignore文件,添加忽略列表
  2. 執行git init初始化代碼倉庫
  3. 執行git config user.email ""git config user.name ""初始化配置
    不建議帶--global參數,最好每個代碼倉庫使用獨立配置信息
  4. 執行git add .添加全部內容到本地倉庫
  5. 執行git commit -m ""提交當前代碼到本地倉庫
  6. 在GitHub上New respository(只填寫Repository name即可)
  7. 複製網頁上的https到剪貼板(不是瀏覽器地址欄,是在頁面上的)
  8. 執行git remote add origin xxx添加遠程倉庫
    在命令行寫到origin後按鼠標右鍵即可將剪貼板內容粘貼至此
  9. 執行git push origin master提交代碼
    這裏不建議使用-u參數。該參數表示以後的push``pull操作默認使用本次的遠程服務器。建議每次執行命令都帶上要操作的對象,不使用默認。
  10. 在網頁上刷新一下即可看到提交結果。
發佈了68 篇原創文章 · 獲贊 49 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章