git reflog。这是合适的用途吗?

时间:2011-03-30 14:44:13

标签: git templates version-control reflog

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

我有一个模板,我从我的所有Web项目开始。我目前正在使用github存储主模板,并且每次构建项目时都只是克隆。

问题在于,当我做越来越多的项目时,我有一些在模板中有用的功能,但是使用我当前的工作流程是很棘手的。

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

这是否有意义,并且我(很可能)完全错过了reflog的观点?

非常感谢

3 个答案:

答案 0 :(得分:3)

在我看来,reflog是git中最丑陋的工具之一 - 我不会使用它,除非我不小心破坏了我自己的一个更改并没有别的办法来实现它。

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

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

答案 1 :(得分: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

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

答案 2 :(得分: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-project创建一个新的“origin”,指向其中央(例如github托管)存储库,template也是如此。如果您愿意,也可以将模板远程指向local-project中央模板存储库而不是本地克隆存储库。