(一)git 的簡介
在實際場景中,git 主要作為分布式的團隊協作工具來完成團隊協作開發。
上圖涉及到的四個點:
工作區(workspace):本地電腦存放項目文件的地方。(日常代碼放置區)
暫存區(Index/Stage):暫時存放文件的地方,通常使用 git add (裝入zsh插件以后簡寫為:gaa)命令將工作區的文件添加到暫存區里。
本地倉庫? (Repository):使用 git commit ?(裝入zsh插件以后添加注釋上傳簡寫為:gcmsg -m '注解')?命令可以將暫存區中的文件添加到本地倉庫中。
遠程倉庫(Remote):不是在本地倉庫中,項目代碼在遠程git服務器上,比如項目放在gitlab上,就是一個遠程倉庫。通常使用 git clone <url>?將遠程倉庫拷貝到本地倉庫中。使用 git push (gp) 將本地倉庫的暫存文件推送到遠程倉庫。
總結:我們可以簡化的把一個基礎的 git 使用流程記憶為, 工作區與暫存區的交互----> 暫存區與本地倉庫的交互 ----> 本地倉庫和遠程倉庫的交互。
(二)git 基本操作命令
由于本人使用 git 時間較短,很多命令沒有涉及到,僅供自用參考。其中打了 * 號的為目前初入門最最常用的指令,會隨著使用時間的增加而持續的記錄更新。
1、配置常用命令:
* 列出當前配置: git config --list
* 列出本地倉庫配置: git config --local --list
列出全局配置: git config --global --list;
列出系統配置: git config --system --list;
總結:列出配置相關--- git config --范圍? --list
2、工作區常用命令:
* 從遠程git倉庫復制項目:? git clone <url>
* 提交工作區所有文件到暫存區:git add?
提交工作區中指定文件到暫存區:git add <file1> <file2> ...
保存工作區文件但在暫存區上刪除此文件 :? git rm --cached <file>
刪除工作區和暫存區刪除對應文件的記錄:git rm <file1> <file2>
撤銷上一次對文件的操作:git checkout --<file>
* 重命名文件,并將已改名文件提交到暫存區:git mv [file-original] [file-renamed]
* 查詢當前工作區所有文件的狀態:git status (gst)
* 比較工作區中當前文件和暫存區之間的差異,也就是修改之后還沒有暫存(gaa)的內容:git diff
* 比較指定文件在工作區和暫存區上的差異 :git diff <file-name>
3、暫存區常用命令:
* 將暫存區中的文件提交到本地倉庫中:git commit -m "提交信息" (gcmsg -m '...')
撤銷上一次提交(提交完發現注解錯誤或者少提交了可用,也可再次gcmsg):git commit --amend
* 比較暫存區與上一版本的差異:git diff --cached
查看提交歷史:git log
4、倉庫常用命令
查看本地倉庫關聯的遠程倉庫:git remote
添加遠程倉庫,一般會取一個簡短的別名:git remote add [remote-name] [url]
* 從遠程倉庫中抓取本地倉庫中沒有的更新:git fetch [remote-name]
將本地倉庫某分支推送到遠程倉庫上:git push [remote-name] [branch-name]?
查看遠程倉庫的詳細信息:git remote show origin
移除遠程倉庫:git remote rm [remote-name]
(三)git 分支
1、分支的簡介
? ? ?如上圖有兩個分支:Master和 branch-1? 。其中Master是默認就存在的一個分支,通常叫它?主分支。主分支是必須有的分支,其名稱也可以通過git遠程倉庫修改默認配置,但一般不建議修改。這個分支也可以刪,但是需要特殊設置下。branch-1 是由我們創建的分支。
? ? 從圖上,我們可以看到每一個commit的引用,引用最先指向的是1。通過遍歷每個分支,我們可以看出最后的通常commit是4。即branch-1 和 master 的合并。
簡而言之,在git中分支只是一個指向單個commit的指針,分支開發可以確保每個人有自己的獨立分支 ,版本迭代更加清晰 ,使得團隊多人協作開發效率更高。
2、分支常用命令
* 創建分支:git branch <branch-name>
* 從當前所處的分支切換到其他分支:git checkout <branch-name>
* 創建分支并切換為當前分支:git checkout -b?<branch-name>
* 刪除分支:git branch -d <branch-name>
* 顯示本地倉庫的所有分支:git branch
* 將當前分支與指定分支進行合并:git merge <branch-name>
* 把遠程分支合并到當前分支:git merge <remote-name>/<branch-name>
查看各個分支最后一個提交對象的信息:git branch -v
從遠程分支checkout出來的本地分支,稱之為跟蹤分支:(會自動判斷應該向遠程倉庫中的哪個分支推送數據)
在跟蹤分支上向遠程分支上推送內容:git push
在跟蹤分支上合并遠程分支:git pull;
(四)反思踩過的坑
1、commit失敗不注意看 iterm的報錯,而直接push ,導致提交不成功。應及時 git status 查看當前的狀態找出未push 成功的原因,并修改。
2、使用fetch只是將遠端數據拉到本地倉庫,并不自動合并到當前工作分支,只能人工合并。因為在dbase新建迭代會設置分支和遠程倉庫的自動關聯,可以直接使用git pull來拉去遠程分支的數據,將遠端分支自動合并到本地倉庫中的當前分支。
3、團隊開發,有新的分支提交到master 的時候,要拉取遠方master 進行合并,再重新push。
4、時刻注意當前的分支是哪個
5、永遠要先保證自己在 gitlab 上的commit 里面已經更新了,再部署 !!!!!!!!!