第三節 git實戰

在日常工作中,使用git時仍有許多疑惑之處,旨在通過一個簡單的實戰項目幫助自己進行記憶。

1. 新建git倉庫 actual-combat

-- 新建文件夾actual-combat
mkdir actual-combat
-- 切換到actual-combat目錄下
cd actual-combat
-- 將文件夾設爲git倉庫
git init
-- 創建測試文件
touch test.txt

在這裏插入圖片描述
2. 修改test文件,增加一句話
在這裏插入圖片描述
在master分支提交test修改

-- 首先查看變更文件
git status
-- 加入緩存區
git add test.txt
-- 提交
git commit -m "master分支第一次提交測試"
-- 再看git狀態
git status

在這裏插入圖片描述
3. 創建開發分支dev,並切換到dev分支

-- 創建開發分支dev,並檢出(這時dev的內容和master一致)
git checkout -b dev 
-- 等價於 
git branch dev
git checkout dev

-- 或者
git switch -c dev

在這裏插入圖片描述
現在我們來模擬幾種情況:

情況一:

在dev分支更改test文件,增加一句話
在這裏插入圖片描述
這時看下git狀態:

git status

在這裏插入圖片描述
當前分支dev下不做任何操作,切換分支到master下:

git checkout master
-- 或者
git switch master

在這裏插入圖片描述
從圖中可以看到,切換到分支master以後,test文件中分支dev的修改同樣存在。
在這裏插入圖片描述
我們在master分支進行提交:

git add test.txt
git commit -m "master分支提交dev修改,第一次"

master提交完代碼以後,我們應該把dev分支刪除掉。因爲master分支是主分支,用於系統發佈,所以我們修改內容一般是再建一個開發分支dev,新建的dev分支和master一致,我們在dev上進行開發,開發完成切換到master
分支進行合併,合併完dev則無用,所以要刪除分支。下次進行開發的時候重複這個動作。

-- 刪除dev分支
git branch -d dev

結論:在所有分支內容都一樣的情況下,如果在任意分支上進行了文件的修改,且沒有進行 add 操作或者commit操作,那麼這個修改是針對所有分支的,也就是在所有分支上都有效,在哪個分支提交就是哪個分支的修改。

情況二:

新建分支dev,並修改test文件。
在這裏插入圖片描述
這時突然接到一個緊急任務,需要去master分支上給一個bug。但是當前dev分支上的東西還沒有改完,不能提交。這時我們可以先進行add,使用stash將修改的內容進行暫存。

git add test.txt
git stash

在這裏插入圖片描述
切換到master進行修改。

git switch master
-- 修改 test文件,提交
git add test.txt
git commit -m "分支master,進行了臨時修改並進行了提交"

在這裏插入圖片描述
臨時任務做完,回到dev分支繼續開發。
先查看當前dev分支下test文件的內容情況
在這裏插入圖片描述
可以看見 在master臨時修改的 分支master,臨時插入任務進行修改並提交 和分支dev第二次修改的 分支dev,第二次修改 兩句話是沒有的。
我們從暫存區恢復dev第二次的修改。

-- 恢復暫存內容
git stash pop

在這裏插入圖片描述
可以看到內容恢復了。
如果這時我們不提交也不暫存,直接切換到master分支,是會報錯的。
在這裏插入圖片描述
爲什麼在情況一的時候不報錯,在情況二的時候報錯呢?
因爲情況一修改時,master和dev是同一個版本,內容一致。而在情況二,我們在master進行了緊急修改並進行了提交,導致現在master和dev版本不一致,所以會有衝突報錯。

我們在dev分支進行提交。

git add test.txt
git commit -m "分支dev第二次修改提交"

在這裏插入圖片描述
我們切換到master分支進行合併。

git switch master
git merge dev

-- 合併時可以使用以下命令,這樣即使分支刪除,信息也不會丟失
git merge --no-ff -m "merge with no-ff" dev

果然出現了衝突:
在這裏插入圖片描述
這時需要解決衝突,然後在master分支進行提交,作爲最終版本。
在這裏插入圖片描述
查看日誌:

-- 查看日誌的兩個命令
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit

在這裏插入圖片描述
刪除dev分支,流程結束。

最後

實際工作中,遇到的問題可能千奇百怪,但是我們遵循一定的原則能解決大部分問題。
實際工作中由於是多人開發,所以採用兩種機制。
如遠程倉庫有master和dev兩個分支,開發的話要克隆dev分支到本地
機制一:直接在dev分支上進行開發,每次提交代碼前,先從遠程倉庫拉取最新的代碼。(不推薦)
機制二:從本地dev分支上在檢出一個分支,如:feature。在feature上進行開發,這樣如果臨時有緊急任務可以切換到dev分支再檢出一個bug分支進行更改,更改完提交合並刪除,然後在切回feature進行開發。開發完成以後,合併到dev分支並解決衝突,刪除feature分支,同步代碼到遠程倉庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章