[英]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.