目前这只是一个假设,但我希望将其付诸实践。
我有一个模板,我开始我所有的网络项目。我目前正在使用github来存储主模板,并在每次构建项目时进行简单的克隆。
问题是,随着我做越来越多的项目,我有一些在模板中有用的功能,但使用我当前的工作流程将它们放入其中是很棘手的。
我的建议是在每个项目开始时从github中提取模板,并沿着本地分支构建项目。当我遇到一些我认为在主模板中有用的东西时,我切换到主分支,在那里实现更改,提交到github,然后使用reflog将这些更改带到当前的本地项目状态。
这有什么意义吗?我是不是(很可能)完全忽略了reflog的要点?
非常感谢
发布于 2011-03-30 22:52:12
在我看来,reflog是git中最丑陋的工具之一--我不会使用它,除非我意外地破坏了我自己的一个更改,并且没有其他方法可以获得它。
鉴于你提议的工作流程,我建议你在本地分支中进行所有的编码,如果你最终为模板编写了一些有用的代码,只需切换到master并精挑细选你想要引入的单个提交。
http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html
发布于 2011-03-30 23:02:27
简单地说,这将改写历史。如果你使用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-31 07:25:40
老实说,我仍然不知道您所说的“使用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-project创建一个新的“源”,指向它的中心(例如,github托管的)存储库,对template也是如此。如果愿意,您还可以将local-project中的远程模板指向中央模板存储库,而不是本地克隆。
https://stackoverflow.com/questions/5487884
复制相似问题