no-image

一些GIT操作的技巧

                                    

一、git stash

我們有時會遇到這樣的情況,正在分支a上開發一半,然後分支b上發現Bug,需要馬上處理。這時候分支a上的修改怎麼辦呢,git add 是不行的,有的git客戶端版本會提示還有add過的檔案沒提交不能切換分支,有的git客戶端版本會把修改帶到b分支。

git stash 就是解決這個問題,它把當前工作區的修改和git add的內容都儲存到一個地方,然後git reset HEAD,使工作區回到上一次提交,處於乾淨狀態。然後就可以很放心的切到另外的分支b幹活了。

# 1.儲存當前工作環境儲存
git stash save "先給我儲存一下,我要去別的分支修bug"

# 2.切換到b分支處理bug,處理完後提交
git checkout b
....

# 3.切換到a分支,並還原初始工作環境
git checkout a
git stash list
git stash pop
# git stash pop相當於執行git stash apply和git stash drop
# git stash apply stash@{num}

二、git rebase

有的時候我們在一個分支a開發的時候,master已經進入了很多修改,這時候如果把a的修改提交上去,可能就會跟主幹有衝突,需要在主幹解決衝突才能提交,這樣比較難看。

這時候git rebase就有用了,git rebase BRANCH_NAME可以把BRANCH_NAME分支的修改帶到當前分支來,這樣當前分支就有了BRANCH_NAME分支的所有內容,這樣在當前分支開發的內容提交以後不會跟BRANCH_NAME有衝突,衝突在當前分支就可以解決。

三、git reset

可以取消已經提交的commit,一般我們只用git reset HEAD^。因為每個分支可能在開發過程中為了儲存過程以便回溯會有很多commit,但是我們要求進入主幹時,每個功能和bugfix只能有一個提交,因此可以先用git reset退回到最早的commit,然後把自己的修改最後打包成一個commit,再去跟主幹合併。

利用這兩個命令,我們可以很好的管理我們的專案開發。我們只有一個master分支作為主幹,不允許在主幹上直接開發。每個同學根據feature和bug的issue建立分支,然後在分支上開發,不管開發過程中有多少個commit,我們要求最終提交每個bugfix或feature只能有一個提交。因此每個同學完成開發後,都需要git reset退到最早的commit,git stash save儲存一下自己的修改,然後git checkout master ; git pull拖一下最新的主幹,然後返回自己的分支,再做git rebase master,把主幹分支推進到當前分支,最後git stash pop彈出修改,有衝突則在當前分支解決,再git push

# 1.修改bug1234,通過git lg檢視當前的comment id為a37b9ff
git checkout -b bug1234

# 2.在bug1234分支上進行修改,並可能多次git commit
# edit some files
# git add .
# git commit -m "comment"

# 3.開發完成後,要提交,合併並處理衝突
git reset a37b9ff
git add .
git stash save "fix bug 1234"
git checkout master
git pull
git checkout bug1234
git rebase master
git stash pop
# 處理衝突...
git add .
git commit

# 4.切換到master提交
git checkout master
git merge dev
git push
# 刪除開發分支
git branch -d bug1234

四、參考

一些Git操作的技巧

關聯文章