[英]Improving a git rebase workflow
我目前正在使用功能分支和在推送之前重新定位到master的非常簡單的git工作流程。
git checkout -b feature
.. make some commits
git checkout master
git pull
如果拉動沒有變化:
git merge feature
git push
如果有變化:
git checkout feature
git rebase master
git checkout master
git merge feature
git push
雖然很高興了解git是如何工作的,但是一直打字有點乏味,我懷疑有一些更快的方法可以實現我正在做的但卻找不到它們。
您最短的步驟總共有6個步驟(沒有更改的情況):
git checkout -b feature
.. make some commits
git checkout master
git pull
git merge feature
git push
這種技術應該適用於兩種情況(也包括6個步驟):
git checkout -b feature
.. make some commits
git fetch
git rebase origin/master
git checkout master
git merge feature
好吧,你可以在合並后使用git pull --rebase
,這樣做:
-r --rebase
在獲取后,將當前分支重新定位在上游分支的頂部。 如果存在與上游分支對應的遠程跟蹤分支,並且自上次提取以來上游分支已重新定位,則rebase使用該信息來避免重新定位非本地更改。
如果你想讓git pull總是使用--rebase而不是合並
pull.rebase, branch.<name>.rebase
請參閱git-config
(1)中的pull.rebase, branch.<name>.rebase
和branch.autosetuprebase
。注意
這是一種潛在危險的操作模式。 它重寫了歷史,當你已經發布了這段歷史時,它並不是一個好兆頭。 除非您仔細閱讀
git-rebase
(1),否則請勿使用此選項。
總結如下:
git branch -b feature
...
git checkout master
git merge feature # By the way, merge's --no-ff might interest you
git pull --rebase # rebases feature onto the new-fetched head if necessary
只需注意一下:如果您對master
進行了更改,那么結果與您的方式略有不同,因為git pull --rebase
自上次pull/push
到拉動HEAD
以來的所有更改,而您的方式會導致拉出更改並將您的master
更改合並,然后根據該feature
進行重新設置。 這大多是無關緊要的(我個人並不喜歡在我的歷史記錄中沒有不必要的pull
誘導合並),但你應該意識到它......
在圖片中,之前:
/-O origin/master
C--A--B master
\--F--G feature
在您的方式之后:
/-O-----\
C--A--B--C*-----(FG) (origin/)master - fast-forward merge (unless --no-ff)
\-F-G-/ feature (rebased!)
git pull --rebase
方式:
/-O
C--A--B--M* => C--O--A--B--M* (origin/)master
\-F-G-/ feature (not rebased!)
相反,如果你想要最終結果
C--O--A--B--F--G
使用
git branch -b feature
...
git checkout master
git rebase feature
git pull --rebase
還要注意git-rebase -i
可以帶來多少樂趣;)
可能一個好的別名可以改善你的工作流程,我用這個
# full rebase
frb = "!sh -c 'x=`git rev-parse --abbrev-ref HEAD` && echo "rebasing to $0 ..." && git rebase $0 && git checkout $0 && git rebase $x'"
用法(在功能分支上):
git frb master
當然,您也可以在開頭添加結帳並在結尾處推送
...在git 1.9.3(osx)上測試,未測試如果存在沖突會發生什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.