我是git的新手,我想尝试分支功能。我正在使用本地存储库。问题是,如果我创建一个新分支然后返回主分支,则会丢失一些文件。
这就是我的所作所为:
我有两个目录:
$ 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
如果我创建一个新分支然后返回主分支,则两个文件都将丢失。所以,让我说明一下:
在创建新分支之前,让我们检查一下什么都没有提交:
$ git status
HEAD detached from 2617e8a
nothing to commit, working directory clean here
让我们检查一下我们是否在主分支中,最后一次提交是从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
现在我回到主分支:
$ 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
[...]
这里发生了什么以及为什么我丢失了我的源文件?
答案 0 :(得分:1)
你不是(丢失任何文件,也没有任何提交)。
这部分起始要求是错误的:
我们还要检查我们是否在主分支[snip]
$ git branch -a * (detached from 2617e8a) master
这表明您在开始时在分支master
上不。相反,你有一个“独立的HEAD”。原始哈希ID的最新显式git checkout
或等效项(例如标记名称或远程跟踪分支名称)已签出提交2617e8a
。您的git log
输出显示当前提交可能是 1 3484261bdd585671bf7c74568542a62610c2deaf
,并且“脱离”措辞表明您可能自己做了这个提交(Git使用“detached at”当你没有移动HEAD,并且当你有了“脱离”时。)
git log
命令默认显示从当前(HEAD
)提交 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
。通常,提交的日期或多或少与它们的图形拓扑一致,因此这些标记不会对排序顺序做出巨大改变。