我在许多开发人员的几个项目中使用git。我通常的工作流程是针对特定的特性/请求进行本地分支,将我的更改合并到上游跟踪的本地分支中,然后推送更改。即使只有一个提交,我也总是会进行分支。我从来不会在与他人共享的分支上进行本地提交,所以我可以自由地在本地进行重基/混混,直到我将更改推送到上游。作为一种偏好,我希望我的合并尽可能快地向前提交。作为一个例子,如果一个项目的版本1是由origin/v1
分支上的所有开发人员推动的,我将:
git checkout v1
git checkout -b feature-A
#Do work on feature-A branch. Test, rebase --interactive to clean up
最终,我想将我的更改合并到v1
本地并推送到origin/v1
。我要做一个git fetch origin
,检查一下feature-A
。如果有更改,我将签出v1
并合并
git fetch origin
#If New changes are present checkout v1 and merge
git checkout v1
git merge origin/v1 #I could pull but I prefer to fetch, log origin/v1, and then merge
现在,为了实现feature-A
的快速合并,我签出feature-A
,重新定位到v1
,签出v1
,合并feature-A
,并将v1
推回origin
。
git checkout feature-A
git rebase v1
git checkout v1
git merge --ff-only feature-A
git push origin v1
非快进提交和合并提交都没有错。再说一次,这只是个人偏好的问题。我想知道是否有更好的工作流程来完成同样的事情,而不需要通过所有的分支签出。可能有一个git命令,我不知道它会在我在更新的v1
分支上重新设置feature-A
之后工作。
https://stackoverflow.com/a/4157106/620304看起来有帮助。一个可能的工作流程是更新v1
与最新的变化从原点和更新v1
feature-A
的头部本地后,我rebase:
#Starting from feature-A currently checked out
git fetch origin
#New changes are present
git checkout v1
git merge origin/v1
git checkout feature-A
#In I didn't fetch anything from origin's v1 branch I can skip the commands between the comments
git rebase v1
git branch -f v1 feature-A
git push origin v1
我肯定会有更好的方法。
只使用快进合并的工作流本质上是一个重基工作流。一般的rebase工作流程与您给出的示例非常相似,除了git rebase origin/v1
而不是合并。
我看过的引用最多的文章是Randy Fay的博客文章:A Rebase Workflow for Git。
请务必阅读本文开头链接的后续文章,了解一些便于使用的快捷方式。