我觉得我应该知道这一点,但我感到很困惑.
我在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状态.提交后,我在哪里推动修改?我如何标记它们并将标签推送到远程?
首先,使用原始标签结帐:
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)
当您签出标签时,您会自动进入“分离头”状态,因为标签是不可变的并且不应移动。当您进行更改然后提交它们时,它们不会进入任何分支或标记 \xe2\x80\x93 ,您对提交的唯一引用是当前的 HEAD 指针。
\n\n为了使工作更轻松,您可以创建一个临时分支来进行工作。
\n\ngit checkout -b tmp v1.0.5\n
Run Code Online (Sandbox Code Playgroud)\n\n您可以创建一个指向当前提交的新标签git tag 1.0.5
(这将标记新提交及其历史记录)。
然后,无需在 master 上重新进行更改,只需将新创建的提交/标签合并到 master 分支中
\n\ngit checkout master\ngit merge 1.0.5\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
3607 次 |
最近记录: |