我正在尝试在git中获取特定版本并将其作为当前版本提交。请考虑以下示例场景:
tag : v2 (current version)
files : 1.txt,2.txt,3.txt
tag : v1
files : 55.xml,33.yml
我正在尝试切换到标记v1并将其作为我当前的版本(获取此特定版本)
通过搜索网络,我能够找到获取所有文件的方法
git checkout tag_name
# ex. git checkout v1
这实际上是从特定版本中提取文件并加载到我的工作目录中。
但我无法提交现有文件并将其推回服务器。
(当它尝试推送时,它显示没有待更改)
答案 0 :(得分:0)
由于您有标签,因此您应该将标签签入分支。
git checkout -b v2 branch_v2
这会将你的项目在标签v2处的状态检入一个名为branch_v2的分支(你可以随意调用它)。
答案 1 :(得分:0)
它显示没有待处理的更改,因为没有更改。如果您希望遥控器上的master
指向v1
,您可以在遥控器上执行update-ref
或reset
。如果您要创建一个新提交,其中v2
的子项与v1
具有相同的树,则可以执行merge
。你究竟想做什么?遥控器是裸机还是工作目录?如果是前者,您应该什么都不做,想要查看v1
文件的任何人都应该结帐v1
。如果是后者,您应该只检查远程上的v1
,但不要进行新的提交。
从您的评论中,您似乎想要对远程仓库进行新的提交,该远程仓库与标记v1
具有相同的文件内容。最好只使用远程仓库上的update-ref
将其重置回v1
,但肯定可以进行新的提交。一种方法是:
git reset $( echo 'Resetting repo to v1' | git commit-tree $(
git show -s --format='%T' v1 ) -p v2 )
这会计算v1
的树,调用带有该参数的commit-tree来创建一个父提交为v2
的新提交对象(或使用HEAD,或任何你想成为其父类的提交对象)新提交)使用提交日志“将repo重置为v1”,然后重置repo,以便HEAD指向新提交。完成此操作后,您应该能够推送回购。只做一个pull
并在旧树中合并可能更简单,但这可能需要相当多的人工干预来解决冲突。
答案 2 :(得分:0)
这是我得到的特定修订版本:
$ git fetch origin cd379d1c02ae095ad945c8c8c833f4fa2aaf51a7
$ git reset --hard FETCH_HEAD
然后,如果我想做一些工作并从刚刚签出的标签中添加提交,我将创建一个新分支:
$ git checkout -b v1a
$ git push -u origin v1a