我是新來的混帳,我想嘗試分支功能。我正在使用本地存儲庫。問題是,如果我創建一個新的分支,然後回到主分支,一些文件會丟失。git checkout刪除文件
這是我做的:
我有兩個目錄:
$ 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'
源文件s爲仍然存在:
$ 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
[...]
這裏發生了什麼,爲什麼我會丟失我的源文件?
感謝您的詳細解答。但是,我怎樣才能解決這個「分離頭部」的問題?據我記得我開始使用git與「git init」,然後我總是使用「git add -A」和「git commit -a」。 – thyme
我不知道你是如何得到分離的HEAD。 Git在「reflogs」中記錄了很多有用的信息(每個分支有一個,'HEAD'本身也有一個),但reflog條目會在一段時間後過期:默認情況下30天有一些,其他90天有效。由於它看起來像你的「主人」是近一年前最後碰到的,HEAD reflog中的痕跡可能早已消失。 [0123] – torek
只要你能找到提交,你所要做的就是給它們一個名字,比如分支名稱。你用'git checkout -b testbranch'完成了這個。如果你運行'git log testbranch',你會看到那些提交。使用'git log --branches',你會看到所有分支都可以訪問的所有提交,在這一點上它只是'master'和'testbranch'。因此使用'git log master testbranch''會做同樣的事情。使用'--all'獲取所有引用(主要是分支和標籤)。將'--oneline --decorate --graph'添加到你的'git log'中以獲得帶有標籤的圖形繪圖(或者嘗試一個GUI--我通常討厭GUI) – torek