[英]git checkout deletes files
我是git的新手,我想尝试使用分支功能。 我正在使用本地存储库。 问题是,如果我创建一个新分支,然后返回到master分支,则会丢失某些文件。
这是我的工作:
我有两个目录:
$ ls
g_LT LT
LT目录中的源代码文件lt_mp2.F:
$ ls LT/ | grep lt_mp2.F
lt_mp2.F
另一个目录包含与此文件的相对符号链接:
$ ls -l g_LT/ | grep lt_mp2.F
lt_mp2.F -> ../LT/lt_mp2.F
如果我创建一个新分支,然后返回到master分支,这两个文件都会丢失。 因此,让我展示一下:
在创建新分支之前,让我们检查是否要提交的内容:
$ git status
HEAD detached from 2617e8a
nothing to commit, working directory clean here
我们还要检查一下是否位于master分支中,并且最后一次提交是从2016年10月13日开始
$ git branch -a
* (detached from 2617e8a)
master
$ git log
commit 3484261bdd585671bf7c74568542a62610c2deaf
Author: [...]
Date: Thu Oct 13 09:25:06 2016 +0200
[...]
现在,我创建一个新分支:
$ git checkout -b testbranch
Switched to a new branch 'testbranch'
源文件仍然存在:
$ ls LT/ | grep lt_mp2.F
lt_mp2.F
$ ls -l g_LT/ | grep lt_mp2.F
lt_mp2.F -> ../LT/lt_mp2.F
现在我回到master分支:
$ git checkout master
Switched to branch 'master'
但是现在源文件不见了:
$ ls LT/ | grep lt_mp2.F
(no output)
$ ls -l g_LT/ | grep lt_mp2.F
(no output)
此外,最后一次提交是从2015年12月而不是2016年10月13日突然提交的:
$ git log
commit 634741172ed34cd687fd91f14da45004b3328f8b
Author: [...]
Date: Tue Dec 1 18:54:57 2015 +0100
[...]
这是怎么回事,为什么我会丢失源文件?
您没有(丢失任何文件,也没有提交)。
您的最初要求的这一部分是错误的:
我们还要检查我们是否在master分支中[snip]
$ git branch -a * (detached from 2617e8a) master
这表明您一开始就不在分支机构master
上。 相反,您有一个“分离的HEAD”。 原始哈希ID或等效项(例如标签名称或远程跟踪分支名称)的最新显式git checkout
commit 2617e8a
。 您的git log
输出显示当前提交可能是1 3484261bdd585671bf7c74568542a62610c2deaf
,并且“与...分离”的措辞表明您可能自己进行了此提交(当您尚未移动HEAD时,Git使用“ detached at”,而当您未移动HEAD时,则“与...分离”)有)。
git log
命令默认显示从当前( HEAD
)commit 2开始并向后工作的提交。 无论HEAD是否“分离”都是如此。 (非分离的HEAD是指向分支名称的HEAD,例如master
。运行git checkout branchname
给您一个非分离的HEAD,即HEAD现在指向branchname ,以便使用命名分支找到提交。 )
如果您想查看更多或其他提交,可以告诉git log
从其他地方开始。 无论您从哪里开始,它都会从那里向后工作。
因此,这仅表示master
(分支名称)指向2015年以来的提交。一旦HEAD
指向master
,则git log
(不带其他参数)从其最近的提交开始,并从此处进行向后工作。
大概如果master
已经过时,那么所有实际工作都在其他分支上进行了。
该文件消失,当你从切换3484261...
到6347411...
(这可能是通过提交确定master
),因为他们在以前的承诺并没有后者。 因此,Git在切换提交时将它们从索引和工作树中删除。 切换回3484261...
(通过按ID或您给它的新名称签出)会将它们放回到索引和工作树中。
1 git log
默认情况下按日期对输出进行排序,首先显示具有较晚日期的提交。 这段代码在我遗漏的某个点上有所更改,因为以前可以将提交“后置日期”到2038年左右,因此,如果要显示,它总是显示在git log
输出的顶部完全没有 当我最近对其进行测试时,它已经停止工作。
2请参见脚注1,并注意您可以更改排序顺序和/或限制排序顺序,例如,使用--topo-order
。 添加--graph
集--topo-order
。 通常,提交的日期或多或少与它们的图拓扑一致,因此,这些标志不会在排序顺序中进行重大更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.