如何只检查给定标签的更改?

时间:2017-05-09 13:16:06

标签: git

让我们假设,我已经添加并提交了以下文件并创建了一个标签' TAGv1'

b.txt ---> TAGv1  -->  commit-id-1
a.txt

我再次添加并提交了以下文件

d.txt ---> TAGv2  -->  commit-id-2
c.txt

当我说,' git checkout TAGv2'它检查所有4个文件(a,b,c和d),它们是预期的

但是,是否可以结帐'只有' c.txt和d.txt'使用' TAGv2'?

据我所知,实时案例并非如此。但是,想知道GIT中是否存在这样的选项/功能

2 个答案:

答案 0 :(得分:0)

仅获取commit-id-2的更改。我会使用git cherry-pick commit-id-2

答案 1 :(得分:0)

你的图表对我没有意义,所以我不确定你的意图。值得注意的是,在Git中,标记名称只是提交哈希的名称。这使得标记名称和分支名称​​几乎相同:分支名称​​也是提交哈希的名称。标记名称和分支名称之间的主要区别在于分支名称​​意味着“移动” - 随时间更改其基础哈希ID - 标记名称​​不应该以这种方式移动。事实上,当您使用git checkout <branch-name>然后使用git commit命令时,分支名称非常强烈地意味着Git会自动移动它

完成所有这些后,有几种方法可以检查或从任何特定提交中提取任何特定文件。例如,假设我们有这个:

  • 分支名称master指向提交deadcab
  • 标记名称v1.3指向提交1c0ffee
  • 提交fadbead没有名称,但您可以在git log历史记录中看到它。

您希望在提交sandwich中查看文件1c0ffee,又名v1.3

git show v1.3:sandwich
git show 1c0ffee:sandwich

都会这样做。

您想进入分支master

git checkout master

会这样做。现在,您要从cucumber中提取文件fadbead的版本,并在master上进行提交,以便master映射到此新提交:

git checkout fadbead -- cucumber
git commit

git checkout步骤有点像git show命令,有两点不同:

  • 它将签出的文件写入工作树。这意味着文件cucumber的工作树版本现在与文件fadbead的{​​{1}}版本匹配。
  • 它将签出的文件写入索引。这意味着上面的cucumber使用更新的文件,就好像您已在其上运行git commit

现在git add指向新提交,您决定要将工作树中的文件master设置回{in} in { {1}},即之前的cucumber提交;但是你这次不想要这个deadcab。您可以使用:

master

或:

git add

将以前的版本恢复到您的工作树中,没有将其写入索引(即,没有为下一次提交暂存它)。这与git show deadcab:cucumber > cucumber 方法的主要区别在于git show master~1:cucumber > cucumber 版本将其写入索引。

(还有一个次要的区别:如果您有适用于该文件的行尾或涂抹过滤器属性,git checkout commit -- path方法将应用它们,而git checkout方法则不适用。)