Git获得特定版本

问题描述 投票:2回答:3

我试图在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

这实际上从特定版本获取文件并加载到我的工作目录中。

但我无法提交现有文件并将其推回服务器。

(当它尝试推送时,它显示没有待更改)

git
3个回答
0
投票

它没有显示未更改的更改,因为没有更改。如果你想让遥控器上的master指向v1,你可以在遥控器上做update-refreset。如果你想创建一个新的提交,它是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并在旧树中合并可能更简单,但这可能需要相当多的人工干预来解决冲突。


0
投票

由于您有标签,您应该将标签签出到分支中。

git checkout -b v2 branch_v2

这将在标记v2处将项目的状态检入到名为branch_v2的分支中(您可以随意调用它)。


0
投票

这是我获得特定修订的方式:

$ git fetch origin cd379d1c02ae095ad945c8c8c833f4fa2aaf51a7
$ git reset --hard FETCH_HEAD

然后,如果我想做一些工作并从刚签出的标签添加提交,我会创建一个新的分支:

$ git checkout -b v1a
$ git push -u origin v1a
© www.soinside.com 2019 - 2024. All rights reserved.