我无法理解Git
.
通过 cli 我们做:
git log
和历史。
1)我们如何知道我们要检查哪个文件/版本?我只看到哈希/作者/评论/日期。不是文件名。
2)如果我这样做,git checkout -commitid-
那么我会转到以前的版本。这与在 ClearCase 中进行结帐相同吗?
3) 要返回我所做的最新更改:git checkout master
. 这将返回到最新版本,但它是否对最新元素进行了结帐?
3 回答
我认为您混淆了其他版本控制系统使用的术语。
git checkout
是用于切换您正在处理的分支的命令。 git checkout master
会将您切换到在 master 分支上工作。 git checkout test
会导致你在一个名为 test 的分支中工作。尝试回答您的问题:
- 这个问题我没看懂,但是我觉得是因为对checkout命令的误解。git 中文件的每个版本都是一个单独的哈希,git log 会显示所有提交,因此您可以在那里看到文件的每个版本。
- 要将分支更改为以前的状态,请使用该
git reset
命令。git checkout -commitid-
实际上会分离您的 HEAD 指针,并让您没有签出任何分支。这可用于查看提交时的状态 - git checkout master 会将您的工作分支更改为 master。要返回最新的更改,人们会做很多事情,例如,有时他们会隐藏现有的更改然后删除存储。
与 ClearCase 不同(请参阅我的旧答案),git 不会逐个文件地运行。
没有带有“元素选择规则”的“配置规范”。
git checkout
可以应用于文件,但默认情况下,它会恢复所有树的内容,而不仅仅是文件的内容。
它与 a 不同,cleartool checkout,
因为您不必标记(甚至锁定)文件以进行修改(如 ClearCase 中的状态):这在分布式环境CHECKEDOUT
中没有意义。git 工作树中的每个文件都可以随时修改、添加到索引并在本地提交。
在 git 中,分支只是提交的链接,由哈希唯一标识。如果你想检查一个特定的提交,你需要知道它的哈希,或者你应该有一个对提交的“引用”。分支和标签都是对提交的“引用”,因此您可以使用分支名称而不是提交哈希来签出该提交中的文件。
3)返回我所做的最新更改:git checkout master。这将返回到最新版本,但它是否对最新元素进行了结帐?
取决于最新版本的含义。如果最新的意思是最新的提交,那么最新的提交可能在另一个分支上,而不是master
分支上。git reflog
向您显示所有参考文献中最近更改的列表。