git:签出一个标签,修改一些东西,然后重新标记

时间:2013-05-01 18:33:10

标签: git github tags

我觉得我应该知道这一点,但我感到困惑。

我在github上分叉了一个存储库。我需要的是签出一个标签(称为“v1.0.5”),修改文件上的语句,用一个名为“1.0.5”的新标签(没有“v”)重新标记该状态,然后执行对主人的改变也是如此。

让我更清楚。我正在将EightMedia的Hammer.js从命名的AMD模块改为匿名模块。

我必须更改的唯一文件是src/outro.js。文件不会从标记v1.0.5更改到HEAD。

我想改变

// requireJS module definition
if(typeof window.define === 'function' && window.define.amd) {
    window.define('hammer', [], function() {
        return Hammer;
    });
}

// requireJS module definition
if(typeof window.define === 'function' && window.define.amd) {
    window.define(function() {
        return Hammer;
    });
}

我想要的是:结帐v1.0.5,更改该文件,并按照我标记1.0.5的方式推送回购,其中包含v1.0.5的完全内容,加上变化。必须将标签推到远程。

然后,结帐主人,再次更改文件并再次将其推送到主人。

结账时v1.0.5我很失落,而且我处于分离的HEAD状态。提交后,我在哪里推动修改?我如何标记它们并将标签推送到远程?

3 个答案:

答案 0 :(得分:8)

首先,使用原始标签结帐:

git checkout v1.0.5

这将使您处于分离的HEAD状态 - 您的提交将不会特别转到任何分支。这听起来像你想要的!

现在,进行更改,暂存和提交。

git commit -a -m "Commit message"

你仍然处于分离的HEAD状态,但是你正处于一个新的提交 - 同时具有你想要的变化和历史记录。标记它!

git tag 1.0.5

要回到遥控器(假设你的仍然是命名原点):

git push origin 1.0.5

这将推送标签本身(1.0.5)以及它指向的所有必要的提交历史记录。

请注意,您的更改不会包含在其他之外的任何位置。根据您的问题,我认为这是您想要的,但如果您需要合并回主人,您可以按照以下步骤操作:

git checkout master
git merge 1.0.5

答案 1 :(得分:4)

签出代码时,您会自动进入“分离的HEAD”状态,因为代码是不可变的,不应移动。当你进行更改然后提交它们时,它们不会继续任何分支或标记 - 你提交的唯一引用就是当前的HEAD指针。

为了使工作更轻松,您可以创建一个临时分支来处理。

git checkout -b tmp v1.0.5

您可以使用git tag 1.0.5创建一个指向当前提交的新标记(这将标记新提交及其历史记录)。

然后,不要在master上重新进行更改,只需将新创建的commit / tag合并到master分支中

git checkout master
git merge 1.0.5

答案 2 :(得分:2)

因为您正在尝试创建备用历史记录。 Git创造了历史 基于整个存储库的状态,而不仅仅是一个文件。如果你想 更改先前的提交正常方法是创建分支

git checkout -b newbranch v1.0.5

在分支上进行更改,然后标记

git tag 1.0.5