1.1Git 的優勢 分支操作
- 大部分操作在本地完成,不需要聯網
- 完整性保證
- 盡可能添加資料而不是洗掉或修改資料
- 分支操作非常快捷流暢
- 與 Linux 命令全面兼容
1.2Git流程

1.3命令列操作
1.3.1本地庫(版本庫或倉庫)初始化
命令:
git init (git add //使用git管理這個檔案 放入暫存區)
效果 $ls -lA (查看以.開始的隱藏檔案)
注意:.git 目錄中存放的是本地庫相關的子目錄和檔案,不要洗掉,也不要胡
亂修改,
1.3.2設定簽名
用戶名:tom Email
作用:區分不同開發人員的身份
辨析:這里設定的簽名和登錄遠程庫(代碼托管中心)的賬號、密碼沒有任何關 系,
命令 :
**專案級別/倉庫級別:**僅在當前本地庫范圍內有效
git config user.name 用戶名
git config user.email 郵箱
- 資訊保存位置:./.git/config 檔案
**系統用戶級別:**登錄當前作業系統的用戶范圍
git config *--global* user.name tom_glb
git config *--global* user.email [email protected]
- 資訊保存位置:~/.gitconfig 檔案
級別優先級
-
就近原則:專案級別優先于系統用戶級別,二者都有時采用專案級別 的簽名
-
如果只有系統用戶級別的簽名,就以系統用戶級別的簽名為準
-
二者都沒有不允
$ ls -lA |less //less 查看檔案后按:q回傳
1.3.2Git基本操作
1.3.2.1 狀態查看 status
git status # 查看作業區、暫存區狀態
1.3.2.2 添加 add
git add [file name] # 將作業區的“新建/修改”添加到暫存區
git add . # 提交所未定位的檔案,
git rm --cached [file name] # 將檔案從暫存區撤回
1.3.2.3 提交 commit
git commit [file1] [file2] ... -m [message] # 將暫存區的內容提交到本地庫 message備注資訊
git commit -a -m [message] # 不經過add 直接添加至本地庫
? 可以直接commit,在不add的情況下
1.3.2.4 查看歷史記錄 log
git log
多屏顯示控制方式:
空格向下翻頁
b 向上翻頁
q 退出
git log --pretty=oneline //一個任務一行顯示
git log --oneline //縮短hash值
git reflog //顯示移動步數
? HEAD@{移動到當前版本需要多少步} //head 指標
1.3.2.5 前進后退 reset --hard
-
基于索引值操作[推薦]
git reset --hard [區域索引值] git reset --hard a6ace91 -
使用^符號:只能后退
git reset --hard HEAD^注:一個^表示后退一步,n 個表示后退 n 步
-
使用~符號:只能后退
git reset --hard HEAD~n注:表示后退 n 步
當執行 git reset HEAD 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是作業區不受影響,
當執行 git rm --cached 命令時,會直接從暫存區洗掉檔案,作業區則不做出改變,
當執行 git checkout . 或者 git checkout – 命令時,會用暫存區全部或指定的檔案替換作業區的檔案,這個操作很危險,會清除作業區中未添加到暫存區中的改動,
當執行 git checkout HEAD . 或者 git checkout HEAD 命令時,會用 HEAD 指向的 master 分支中的全部或者部分檔案替換暫存區和以及作業區中的檔案,這個命令也是極具危險性的,因為不但會清除作業區中未提交的改動,也會清除暫存區中未提交的改動,
1.3.2.6 reset 命令的三個引數對比
-
–soft 引數
-
僅僅在本地庫(倉庫)移動 HEAD 指標
注:本地庫若后退了,會讓暫存區與作業區顯得往前走了
-
-
–mixed 引數
- 在本地庫移動 HEAD 指標
- 重置暫存區
-
–hard 引數
- 在本地庫移動 HEAD 指標
- 重置暫存區
- 重置作業區(云上)
1.3.2.7 洗掉檔案并找回 reset前一個版本
- 前提:洗掉前,檔案存在時的狀態提交到了本地庫,
- 操作:git reset --hard [指標位置] 回退版本
- 洗掉操作已經提交到本地庫:指標位置指向歷史記錄
- 洗掉操作尚未提交到本地庫:指標位置使用 HEAD
1.3.2.8 比較檔案差異
-
git diff [檔案名]- 將作業區中的檔案和暫存區進行比較
-
git diff [本地庫中歷史版本] [檔案名]- 將作業區中的檔案和本地庫歷史記錄比較
-
不帶檔案名比較多個檔案
名詞解釋
名詞解釋:
CRLF: "\r\n", windows系統環境下的換行方式
LF: "\n", Linux系統環境下的換行方式
Linux語法
ctrl+l 清屏 clear
linux語法
$ cat good.txt # 查看文本內容
$ vim good.txt # 編輯檔案 i插入 ESC wq保存退出
$ pwd(英文全拼:print work directory) # 顯示目前的目錄
$ mkdir(英文全拼:make directory) # 創建一個新的目錄
$ rmdir(英文全拼:remove directory) # 洗掉一個空的目錄
$ cp(英文全拼:copy file) # 復制檔案或目錄
$ rm(英文全拼:remove) # 洗掉檔案或目錄
$ mv(英文全拼:move file) # 移動檔案與目錄,或修改檔案與目錄的名稱
$ tail -n 100 [/etc/cron 檔案路徑 ] # 顯示最后100行資料 -f 常用于查閱正在改變的日志檔案,

創建檔案或檔案夾的方式
touch # 用于修改檔案或者目錄的時間屬性,包括存取時間和更改時間,若檔案不存在,系統會建立一個新的檔案,
vi # vi編輯器 編輯檔案,沒有會自動創建
mkdir # 創建目錄,沒有會自動創建使用vim時,如果不小心按了 Ctrl + s后,會發現不能輸入任何東西了,像死掉了一般,其實vim并沒有死掉,這時vim只是停止向終端輸出而已,要想退出這種狀態,只需按Ctrl + q 即可恢復正常,
1.4分支管理
1.4.1 分支的好處
- 同時并行推進多個功能開發,提高開發效率
- 各個分支在開發程序中,如果某一個分支開發失敗,不會對其他分支有任 何影響,失敗的分支洗掉重新開始即可
- 一般作業至少需要兩個分支 master(主分支)、dev(開發分支)
1.4.2分支操作
1.4.2.1創建、洗掉分支命令:branch
? 分支創建新分支時,新創建的分支代碼與創建者的分支代碼保持一至,
git branch (分支名) # 創建分支
git branch # 查看分支
git branch -d 需要洗掉的分支名 # 查看分支
1.4.2.2切換分支命令:checkout
git checkout (分支名)
當你切換分支的時候,Git 會用該分支的最后提交的快照替換你的作業目錄的內容, 所以多個分支不需要多個目錄,
1.4.2.3合并分支命令:merge
若A分支合并B分支:需要先切換到A分支,然后在A分支下合并B分支,
git merge (有新內容分支)
1.4.2.3 解決沖突
-
沖突的表現
CONFLICT (content): Merge conflict in good.txt
Automatic merge failed; fix conflicts and then commit the result.提示產生沖突,需要解決,
**產生沖突的原因:**merge 分支的代碼與原分支的代碼修改過同一行的檔案,(未修改同一行檔案一般會自動合并)
-
沖突的解決
- 第一步:編輯檔案,洗掉特殊符號
- 第二步:把檔案修改到滿意的程度,保存退出
- 第三步:
git add [檔案名] - 第四步:
git commit -m "日志資訊"- 注意:此時 commit 一定不能帶具體檔案名,因為此時需要commit多個檔案所以不加檔案名,
1.5連接GitHub
1.5.1創建遠程倉庫的別名 remote add
git remote -v 查看當前所有遠程地址別名
git remote add [別名] [遠程地址]
1.5.2 推送本地庫(版本庫)到遠程倉庫 push
git push [別名] [分支名]
1.5.3 克隆 clone
git clone [遠程地址]
1.5.4 拉取 pull
git pull 命令用于從遠程獲取代碼并合并本地的版本,用于沖突不是很多的情況,否則用fetch后merge
git pull 其實就是 git fetch 和 git merge FETCH_HEAD 的簡寫, 命令格式如下:
git fetch [遠程庫地址別名] [遠程分支名] #從遠程獲取代碼庫
git merge [遠程庫地址別名/遠程分支名]
git pull <遠程主機名> <遠程分支名>:<本地分支名>
$git pull origin master --allow-unrelated-histories # 強制合并 git庫里有多個分支目前只想修改一個分支的內容
1.5.5 團隊其他人推送
如果不是基于 GitHub 遠程庫最新版所做的修改,不能直接推送(push),必須先拉取(pull),拉取下來后進入沖突狀態,解決沖突完成之后推送(push),
1.5.6 跨團隊協作
1.fork
? 在github的專案界面右上角
2.clone 跨團隊fork后擁有的遠程庫
3.改動后pull 跨團隊的遠程庫
4.在GitHub上的專案界面點 Pull request >>> New pull request >>> 寫訊息Create pull request
5.專案所有人查看跨團隊的 Pull request
6.審核代碼
7.合并代碼 Merge pull request
8.將遠程庫拉取到本地 pull
1.6ssh連接Git
略
1.7Eclipse連接Git
1.7.1 查看Git 設定本地庫的用戶簽名
? window >> preferences >> Team >> Git >> Configuration(Repository Settings選項卡) >> Add Entry
1.7.2 解釋 合并工具zoomit
- 創建好eclipse的本地庫之后 需要git add 添加到快取區將檔案追蹤,如果檔案未被追蹤檔案無法上傳到倉庫,
- 專案中的所有檔案不需要全部都進行追蹤,有一些用于專案管理的檔案不需要上傳,
- Navigator視窗可查看專案的所有檔案
- 專案右鍵 >> Team >> Add to index(添加至倉庫快取)
- commit 需要填寫提交資訊,一般是介紹操作的用途,或修改的檔案名
- 轉換工程型別:專案右鍵 >> Configure >> Convert to Maven Project
- 低版本匯入git專案需要指定作業區以外的專案,高版本一般指定作業目錄,
- 在做修改之后需要提交到本地庫(commit)才能往git上提交,一般需要先pull 后 Push ,
- 沖突合并的工具:merge tool 左邊是自己的,右邊是git上的,左邊可以修改,右邊不可以修改,
1.8Git的作業流
1.8.1 分類
-
集中式作業流
像 SVN 一樣,集中式作業流以中央倉庫作為專案所有修改的單點物體,所有 修改都提交到 Master 這個分支上, 這種方式與 SVN 的主要區別就是開發人員有本地庫,Git 很多特性并沒有用到,
-
Gitflow作業流
Gitflow 作業流通過為功能開發、發布準備和維護設立了獨立的分支,讓發布 迭代程序更流暢,嚴格的分支模型也為大型專案提供了一些非常必要的結構,
-
Forking 作業流
Forking 作業流是在 GitFlow 基礎上,充分利用了 Git 的 Fork 和 pull request 的 功能以達到代碼審核的目的,更適合安全可靠地管理大團隊的開發者,而且能接受 不信任貢獻者的提交,
1.8.2 GitFlow作業流詳解
1.8.2.1分支的種類
-
主干分支 master
主要負責管理正在運行的生產環境代碼,永遠保持與正在運行的生產環境 完全一致,
-
開發分支 develop
主要負責管理正在開發程序中的代碼,一般情況下應該是最新的代碼,
-
bug 修理分支 hotfix
主要負責管理生產環境下出現的緊急修復的代碼, 從主干分支分出,修 理完畢并測驗上線后,并回主干分支,并回后,視情況可以洗掉該分支,
-
準生產分支(預發布分支) release
較大的版本上線前,會從開發分支中分出準生產分支,進行最后階段的集 成測驗,該版本上線后,會合并到主干分支,生產環境運行一段階段較穩定后 可以視情況洗掉,
-
功能分支 feature
為了不影響較短周期的開發作業,一般把中長期開發模塊,會從開發分支 中獨立出來, 開發完成后會合并到開發分
1.8.2.2GitFlow作業流舉例
操作:
切換分支:Team >> switch to >>
合并分支:Merge
- 創建分支 new Branch
- 切換分支審查代碼 ,并從commit代碼到Git庫
- 專案經理 檢出遠程分支 checkout (專案經理本地創建出新的分支(前面新建的))
- 切回master
- 合并分支 merge
- 合并成功后推向Git
1.9 Gitee實戰
見:https://blog.csdn.net/qq_43530326/article/details/123435355
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504385.html
標籤:其他
