让我们假设,我已经添加并提交了以下文件并创建了一个标签' 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中是否存在这样的选项/功能
答案 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
方法则不适用。)