1. 程式人生 > 其它 >Git(2)

Git(2)

一、協同開發

多人合作開發一個專案(多人公用一個遠端倉庫),下面就拿路飛後臺專案為例

# 第一步:建立工作區,初始化倉庫
git init

# 第二步:設定忽略檔案
.idea
.DS_Store
/script
/logs/*.log
__pycache__

# 第三步:提交到暫存區,再提交到版本庫
git add .
git commit -m '第一次提交,寫完了首頁功能'
    
# 第四步:gitee遠端新建一個遠端倉庫(空)
# 建立一個origin
git remote add origin [email protected]:pocohy/luffy_api.git
# 把本地倉庫程式碼推送到遠端倉庫
git push origin master

        
# ---------------以上操作可能是你領導做好了-----------------
首先,專案的擁有者,會把新來的人加成專案的協同開發者
然後,我們(開發者)需要將程式碼克隆下來 
# 克隆程式碼
git clone https://gitee.com/pocohy/luffy_api.git
# 開發新功能,假設我們開發了個s1.py的功能
git add .
git commit -m '新增了s1.py'
git push origin master 
# 注意:推送到遠端倉庫時,1.使用者名稱密碼,2.對倉庫有寫許可權

# 在提交之前一定要先拉一下程式碼,保證本地版本庫跟遠端保持一致,是最新
# (以後只要提交程式碼,都要拉一下,沒事就拉一下,保證出現衝突概率小)
git pull origin master
# 然後再提交到遠端倉庫
git push origin master

二、線上bug分支解決方案

'''
1.我們開發了一個產品,主功能已上線,現在伺服器執行版本是v2
2.然後我們決定開發新功能,於是乎使用dev分支開發
3.忽然發現V2版本有bug,所以我們新建一個bug分支(基於master分支建立bug分支)
4.我們開始改bug,把變更提交到bug分支,然後測試
5.測試完畢合併到master主分支上,這個版本叫v2.1
6.dev分支的新功能開發完了,要合併到master分支,這個版本叫v3
(dev分支和master分支合併,可能會有衝突,也可能沒有)
'''

2.1 解決bug,開發新功能,不出衝突的情況

git branch dev  # 本地新建dev分支
git checkout dev  # 切換到了dev分支(此時遠端倉庫沒有這個分支)
git push origin dev  # 把本地dev分支推到遠端

# 開發新功能
vi ss1.py
git add .
git commit -m 'dev開發了使用者功能'
git push origin dev   # 把本地dev的更改提交到遠端dev

# 繼續開發新功能
vi ss1.py  # 加入了一行
git add .
git commit -m 'dev開發了訂單'
git push origin dev   # 把本地dev的更改提交到遠端dev

# 測試發現線上系統有bug,去修復bug
# 基於master建一個bug分支
git checkout master  
git branch bug
git checkout bug  # 切換到bug分支

vi ss2.py  # 寫點程式碼
git add .
git commit -m 'bug分支修復了'
# 本地bug合併到master
git checkout master
git merge bug   # 不會出衝突
git push origin master # 把本地master推送到遠端master,最新v1.11版本釋出

# 切回到dev繼續開發
git checkout dev
# 又增加了程式碼


# 把dev合併到master
git checkout master
git merge dev  # 不會衝突

git push origin master   # 不會衝突,最新版本釋出

2.2 解決bug,開發新功能,出衝突的情況

# 把所有分支都刪除
git branch dev
git checkout dev
vi common.py  # 寫入程式碼
git add .
git commit -m 'dev增加了common.py'

# 線上出bug
git checkout master
git branch bug
git checkout bug
vi common.py  # 寫入程式碼
git add .
git commit -m 'bug分支增加了common.py'

# 把bug更改合併到master上
git checkout master
git merge bug    # 不會衝突


# 把dev分支合併到master(衝突)
git merge dev   # 出衝突
# 解決衝突 (該刪刪,該留留)

git add .
git commit -m '解決衝突'
git push origin master

三、衝突解決

3.1 多人在同一分支協同開發導致衝突

# 員工張三在s1.py第二行增加了一句
print('hello world')
# 然後提交到遠端倉庫

# 員工李四在本地,沒有及時拉程式碼,在s1.py第二行增加了一句
print('hello world')
# 然後李四從遠端倉庫拉取程式碼,就會出現衝突,程式碼如下
<<<<<<< HEAD   # 開始,下面是李四的程式碼
print('hello world')
=======  # 李四的程式碼結束,下面是張三的程式碼
print('hello world')
>>>>>>> 2e8da99c75814f197f7909d1cf7816adfc4ccd81 # 張三程式碼結束(後面的數字+字母是版本號,可以通過版本號查詢是誰提交的)

'''
衝突的兩種解決辦法
1.如果衝突是同一個功能,跟同事商量,保留某一個人的
2.如果衝突不是同一個功能,保留倆人程式碼
'''
git add .
git commit -m '解決衝突'
git pull origin master  #正常來講不會有衝突(存在衝突問題)
git push origin master

3.2 分支合併導致衝突

# 操作就是2.2的操作

四、線上分支合併(pr)

'''
現在我們有master分支和dev分支(本地和遠端都有)
所有人在dev分支開發(有可能出衝突)
現在我們需要合併分支,把dev合併到master上
之前我們使用的方法是本地合併,dev合併到master,然後提交master到遠端
現在我們可以學習新方法!
在線上完成dev合併到master---》提交一個pull request,簡稱pr
'''

# 本地建立dev,提交到遠端
git branch dev  # 建立一個dev分支
git checkout dev  # 切換到dev分支裡(建立一個s1新檔案,提交到本地倉庫)
git push origin dev  # 把dev提交到遠端倉庫


# 在線上完成分支合併
'''
在gitee上切換到dev分支,然後點選 +Pull Request 的按鈕
源分支是需要合併的dev,目標分支就是被合併的master分支,寫好標題內容,提交
然後經過領導測試、稽核,就可以合併分支了
'''

五、遠端倉庫回滾

# 切換到master分支
git checkout master
# 本地恢復到最初狀態
git reset --hard 07f84def3eaa1e4264d16936b699582f7e9d2555版本號

# 提交到遠端(強制提交)
git push origin master -f  # 一般不要用

六、使用pycharm操作git