签出旧提交会删除git中的新提交-为什么?

如何解决签出旧提交会删除git中的新提交-为什么?

| 我刚做了一个新的git repo。我创建了几个文件,将它们添加到存储库中并提交了。然后,我添加了几个其他新文件,将它们添加到git中,然后再次提交。 令我惊讶的是,如果我尝试签出初始提交,它将删除新提交(至少看起来是这样)。在完成操作时出现的egit窗口中,它说出有关“将分支执行为空”的内容。 我已经尝试了3次,并且总是发生,所以我想这确实是预期的行为。 任何人都可以解释为什么会这样吗?其背后的原理是什么? 谢谢     

解决方法

当您签出旧提交时,它不会擦除新文件,而是将工作副本移回旧版本。例如,您的历史记录可能如下所示: 参考:v-- master <-HEAD 提交:1 2           -* ------ * 文件:| |             +-foo + foo             +-酒吧+酒吧                    + baz 这表示您有两个提交,即1和2(当然,它们将是长十六进制字符串,但为了方便起见,我们将其称为1和2)。在提交1中,您有文件
foo
bar
。在提交2中,添加文件
baz
。现在,如果您检出提交1,这意味着您希望将工作树切换为与提交1中的样子完全一样,更新您的
HEAD
引用以指向它: Refs:v-- HEAD v-- master 提交:1 2           -* -------- * 文件:| |             +-foo + foo             +-酒吧+酒吧                      + baz 因此,现在您的工作树看起来就像在提交1中所做的一样;您只有have0ѭ和
bar
。如果您签出
master
或再次提交2,应该看到
baz
重新出现。 这回答了你的问题了吗?我不太确定为什么您要签出commit 1,而不让目录内容像在commit 1中一样出现,所以也许我误解了您的问题。 请注意,如果检出提交1,可能会收到警告,提示您将头顶分离。超脱的头是没有指向分支的
HEAD
引用。如果您有一个独立的头,则您创建的任何新提交都不会被特定分支引用;它们将仅由您的
HEAD
引用,这意味着如果您以后签出
master
或其他分支,将没有任何引用它们(引用日志除外)。 另外,当您检出commit 1时,如果您执行
git log
查看历史记录,则默认情况下它将向您显示当前
HEAD
修订版的历史记录(即,您当前已检出的版本)。由于这指向修订1,而在其历史中没有其他内容,因此您只会在历史中看到修订1。您仍然可以通过直接参考其他修订版本或通过指向它们的引用(例如ѭ6see)来查看它们的历史记录。在上面的示例中,如果您执行
git log master
,则会看到包含提交1和2的历史记录。 为了查看您的回购的完整历史记录,我通常使用
gitk --all
来向我显示存储库中的所有分支,标签和其他引用以及它们的历史记录。您提到您正在使用EGit,我不熟悉它,但是它可能具有类似的“显示所有历史记录”选项。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?