我目前正在使用功能分支工作一个非常简单的git工作流程,并在推送之前重新定位到master。
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是如何工作的但是一直打字有点乏味,我怀疑有一些更快的方法来实现我正在做的但却找不到它们。
答案 0 :(得分:4)
您的最短步骤共有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
答案 1 :(得分:2)
嗯,你可以在合并之后使用git pull --rebase
,这就是:
-r --rebase
在获取后,将当前分支重新定位在上游分支的顶部。如果有一个对应的远程跟踪分支 自上次以来,上游分支和上游分支都进行了重组 如果获取,则rebase使用该信息来避免非本地化 变化。
如果你想让git pull一直使用--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
;)
答案 2 :(得分:2)
可能一个好的别名可以改善你的工作流程,我用这个
# 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)上测试过,未测试如果存在冲突会发生什么