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

jan*_*nce 3 tags git github

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

我在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;
    });
}
Run Code Online (Sandbox Code Playgroud)

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

我想要的是:checkout v1.0.5,更改该文件,并以我拥有1.0.5包含v1.0.5 的确切内容的标记以及更改的方式推送repo .必须将标签推送到远程.

然后,checkout master,再次更改文件并再次将其推送到master.

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

kil*_*een 8

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

git checkout v1.0.5
Run Code Online (Sandbox Code Playgroud)

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

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

git commit -a -m "Commit message"
Run Code Online (Sandbox Code Playgroud)

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

git tag 1.0.5
Run Code Online (Sandbox Code Playgroud)

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

git push origin 1.0.5
Run Code Online (Sandbox Code Playgroud)

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

请注意,您的更改将不包括任何地方其他比这个标签.根据您的问题,我认为这是您想要的,但如果您确实需要合并回主人,您可以遵循:

git checkout master
git merge 1.0.5
Run Code Online (Sandbox Code Playgroud)


kni*_*ttl 5

当您签出标签时,您会自动进入“分离头”状态,因为标签是不可变的并且不应移动。当您进行更改然后提交它们时,它们不会进入任何分支或标记 \xe2\x80\x93 ,您对提交的唯一引用是当前的 HEAD 指针。

\n\n

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

\n\n
git checkout -b tmp v1.0.5\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

然后,无需在 master 上重新进行更改,只需将新创建的提交/标签合并到 master 分支中

\n\n
git checkout master\ngit merge 1.0.5\n
Run Code Online (Sandbox Code Playgroud)\n