我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于
svn up .
使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站
git checkout HEAD^ src/
(src是包含已删除文件的目录)。
现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?
我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于
svn up .
使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站
git checkout HEAD^ src/
(src是包含已删除文件的目录)。
现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?
当前回答
意识到我有一个超然的头脑,却不知道我是如何做到的(就像三次提交一样),我还发现尝试合并、重基或樱桃选择会引发数百次合并冲突,所以我采取了不同的方法:
(假设一切都已完成(工作树“干净”))保存我的提交消息:gitlog>/tmp/log保存我的工作树:mkdir/tmp/backup&&cp-a all_my files_and_directories/tmp/backup还原到master:git checkout master删除所有工作文件和目录:rm。。。使用备份:cp-a/tmp/backup/。gitadd和gitcommit使用保存的/tmp/log中的消息,可能使用不同的文件子集重复它。。。
缺点是,如果一个文件在master之后多次更改,则会丢失提交历史记录,但最终我有了一个干净的master。
其他回答
由于“分离的头状态”使您处于临时分支,所以只需使用git checkout,这将使您处于上一个分支。
如果你做出了改变,然后意识到你是一个独立的人,你可以这样做:stash->checkout master->stash pop:
git stash
git checkout master # Fix the detached head state
git stash pop # Or for extra safety use 'stash apply' then later
# after fixing everything do 'stash drop'
您将拥有未提交的更改和正常的“附加”HEAD,就像什么都没有发生一样。
这种方法可能会丢弃部分提交历史记录,但如果旧主分支和当前状态的合并很棘手,或者您不介意丢失部分提交历史,则会更容易。
要简单地保持当前状态而不合并,请将当前分离的HEAD转换为主分支:
手动备份存储库,以防发生意外错误。提交您要保留的最后更改。创建一个临时分支(让我们将其命名为分离头),该分支将包含当前状态的文件:
git checkout -b detached-head
(a) 如果不需要保留主分支,请将其删除
git branch -D master
(b) 如果要保留,请重命名
git branch -M master old-master
将临时分支重命名为新的主分支
git branch -M detached-head master
资料来源:改编自Gary Lai的这篇Medium文章。
为了进一步澄清@Philippe Gerber的答案,这里是:
在樱桃采摘之前,在这种情况下,需要一个git结账大师。此外,它只需要在分离头中提交。
吉特告诉我怎么做。
如果键入:
git checkout <some-commit_number>
保存状态
git add .
git commit -m "some message"
然后:
git push origin HEAD:<name-of-remote-branch>