0

目前这是假设性的,但这是我想付诸实践的工作流程。

我有一个模板,我从它开始我的所有 Web 项目。我目前使用 github 来存储主模板,并且每次构建项目时都简单地克隆。

问题是随着我做越来越多的项目,我有一些在模板中很有用的功能,但是将它们放入我当前的工作流程中是很棘手的。

我的建议是在每个项目开始时从 github 中提取模板,并沿着本地分支构建项目。当我遇到我认为在主模板中有用的东西时,我切换到主分支,在那里实施更改,提交到 github,然后使用 reflog 将这些更改带到当前的本地项目状态。

这有什么意义吗?我(很可能)完全错过了 reflog 的要点吗?

非常感谢

4

3 回答 3

3

简单地说,这将改写历史。如果您使用 github,这将给您带来痛苦。如前所述,reflog 不是您经常使用的工具。

在您的情况下,绝对没有理由使用 reflog。只需执行此操作,您就可以拥有相同的工作流程。想象一下,您正在处理my_local_project分支,并且您想要对模板进行一些更改。然后,您只需执行以下操作:

git checkout master
# Hackety, hackety, make the change in your template
git checkout my_local_project
git merge master

现在,您对分支所做的所有更改都将以干净的方式master合并到其中。my_local_project

如果您将项目保存在与模板不同的存储库中,这甚至会起作用(只需稍作修改)。

于 2011-03-30T15:02:27.017 回答
3

在我看来,reflog 是 git 中最丑陋的工具之一——我不会使用它,除非我不小心破坏了我自己的更改并且没有其他方法可以实现它。

鉴于您提出的工作流程,我建议您在本地分支中进行所有编码,如果您最终编写了对模板有用的内容,只需切换到 master 并挑选您想要引入的单个提交。

http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html

于 2011-03-30T14:52:11.633 回答
1

老实说,我仍然不知道“使用 reflog 将这些更改与我一起带到当前的本地项目状态”是什么意思。reflog 只显示给定 ref 的过去位置。您仍然必须合并/rebase/cherry-pick 才能真正将这些更改“带入”其他任何地方。通常合并是最优雅的方式。

例如:

git clone template local-project
cd local-project
git remote rename origin template-origin
# make changes and commit them
git add ...; git commit

# suppose changes have been made in the template (work as normal there)
# back in local-project, merge the template's master branch:
git pull template master

一点都不复杂。只需将分支与您想要的更改合并即可。这可能是显而易见的,但请确保您永远不要以其他方式 - 从本地项目到模板。

当然,也可以酌情弄乱你的遥控器。您可能希望local-projecttemplate. 如果您愿意,您还可以将模板远程指向local-project中央模板存储库,而不是本地克隆它。

于 2011-03-30T23:25:39.503 回答