我觉得我应该知道这一点,但我越来越困惑了。
我在 github 上创建了一个仓库。我需要的是 checkout 一个标签(称为“v1.0.5”),修改文件上的语句,用一个名为“1.0.5”(不带“v”)的新标签重新标记该状态,然后执行对 master 进行相同的更改。
让我更清楚一点。我正在将 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;
});
}
我想要的是: checkout v1.0.5,更改该文件,并以我有一个包含 exact 的标签 1.0.5
的方式推送 repo v1.0.5 的内容,加上更改。标签必须推送到远程。
然后,checkout master,再次更改文件,再次推送给master。
checkout v1.0.5 时我完全迷路了,我进入了分离的 HEAD 状态。提交后,我将修改推送到哪里?我如何标记它们并将标记推送到远程?
最佳答案
首先,使用原始标签 checkout :
git checkout v1.0.5
这将使您处于分离的 HEAD 状态 - 您的提交不会具体到任何分支。这听起来像你想要的!
现在,进行更改、暂存并提交。
git commit -a -m "Commit message"
您仍处于分离的 HEAD 状态,但您处于新的提交状态 - 具有您想要的更改和历史记录的提交。所以标记它!
git tag 1.0.5
推回远程(假设你的仍然命名为 origin):
git push origin 1.0.5
这将推送标签本身 (1.0.5) 以及它指向的所有必要的提交历史。
请注意,您的更改不会包含在除此标记之外的任何地方。。根据你的问题,我认为这就是你想要的,但如果你确实需要 merge 回 master,你可以按照:
git checkout master
git merge 1.0.5
关于git: checkout 一个标签,修改一些东西,然后再次标记它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324143/