更新到GIT中的特定提交ID

时间:2014-11-26 06:21:56

标签: git

我正从SVN转到GIT。通常在部署程序包时,工作目录会更新为特定的修订版本< = HEAD,但始终大于工作副本的当前版本。所以在SVN中它很简单,只需更新到特定版本

假设工作目录的当前版本 - 34500和HEAD在34600,并且需要为34576部署packagae。因此,在SVN中只需

svn update -r34576

当需要为更高版本创建新包时,我们只需转到更高版本,例如

svn update -r34589

现在,尝试在GIT中做同样的事情。包需要从​​master创建。但没有必要提升HEAD。这就是我要做的事情:

git checkout 3ef0d...

 git pull --rebase origin master
 git checkout 3ef0d...

同样,当我想要更高的提交ID / revison

2 个答案:

答案 0 :(得分:1)

听起来不错。您签出版本,然后从中构建您的包。如果您不想要artifcats,我还建议使用archive命令从提交3ef0d导出源树,然后从那里构建包。

答案 1 :(得分:1)

假设 - 假设 - 这是您从git log --graph --oneline获得的输出。

* de65bbf < HEAD
* 189ca83
* 40c918c
*   5497694
|\  
| * 5295fe4
* | 7879de1
|/  
* 61f5fcb

假设,假设提交5295fe4中的工作是在一个单独的分支上完成的,然后合并到master中。由此产生的合并提交5497694是您要发布到生产中的。

使用git pull下载存储库后,Git将包含该提交的所有工作以及其他一些工作,这是预期的 - HEAD是对提交图提示的引用。如果可以,我会避免在这里使用rebase标志;变基是强大的,但如果在一个很多人都可以看到它的分支上完成,它可能会引起一些心痛。

如果你真的知道你在使用rebase做什么,那么你就会有更大的力量。我建议等到你对Subversion和Git之间的细微差别感到十分满意。

如果您只想查看 提交,那么git checkout 5497694就足够了。但是,您处于detached HEAD状态 - 此处完成的提交将创建未被分支引用的提交条目,这使得难以跟踪。当然,您可以创建该提交的分支并在那里对其进行更改。

如果您想正式声明此特定提交是可释放的,那么标记它将是一个更好的主意 - 改为运行git tag version-number 5497694,这将创建一个更容易引用此特定提交。

但最终,您只想使用git pull下拉更改。如果您的工作取决于特定的办理登机手续,git pull会将您排除在外。

顺便说一下,回答一个关于pull vs checkout的早期问题:pull将使用来自远程服务器的更改来更新本地分支; checkout通常用于创建分支。