我在我的存储库中做一些工作,注意到一个文件发生了本地更改。我不再需要它们了,所以我删除了文件,以为我可以签出一份新的副本。我想做的Git相当于

svn up .

使用git pull似乎不起作用。一些随机搜索让我找到了一个有人推荐的网站

git checkout HEAD^ src/

(src是包含已删除文件的目录)。

现在我发现我有一个分离的脑袋。我不知道那是什么。我怎么撤销?


当前回答

这对我有用,它将为分离的头部分配一个新分支:

git checkout new_branch_name detached_head_garbage_name

其他回答

由于“分离的头状态”使您处于临时分支,所以只需使用git checkout,这将使您处于上一个分支。

使用gitrebase,您可以将HEAD移动到所需的提交

假设您的分支处于分离状态,如下所示:

* bfcb8f9 Commit 4
* 540a123 Commit 3
* 4356d64 Commit 2
| * fecb8d2 Commit 2
|/
| * 8012f45 Commit 2x
|/
| * 6676d15 (HEAD -> master) Commit 2 --amend
|/
* 1818f91 Commit 1

分离的头部是通过错误地重新定基而创建的,指向一个分离的提交,该提交之前是通过gitcommit--modify命令创建的。

如果要将HEAD ref移动到最近的提交,请使用要指向的所需HASH提交应用重基。在本例中,哈希是最近的提交:

git rebase bfcb8f9

这将使分支的HEAD指向所需的提交(在本例中是最近的):

* bfcb8f9 (HEAD -> master) Commit 4
* 540a123 Commit 3
* 4356d64 Commit 2 --amend
| * fecb8d2 Commit 2
|/
| * 8012f45 Commit 2x
|/
| * 6676d15 Commit 2
|/
* 1818f91 Commit 1
git pull origin master

对我来说很有用。它只是明确地给出了远程和分支名称。

分离的头部意味着您不再在分支上,您已经在历史中签出了一个提交(在本例中,提交是head之前的提交,即head^)。

如果要删除与分离的HEAD关联的更改

你只需要检查你所在的分行,例如。

git checkout master

下次更改文件并希望将其恢复到索引中的状态时,不要先删除该文件,只需执行以下操作

git checkout -- path/to/foo

这将把文件foo恢复到索引中的状态。

如果您希望将更改与分离的HEAD保持关联

运行gitbranchtmp-这将在名为tmp的新分支中保存更改。运行git签出主机如果您想将所做的更改合并到master中,请从master分支运行gitmergetmp。运行git checkout master后,您应该在master分支上。

处于“分离头部”意味着head指的是特定的未命名提交(与命名分支相对)(cf:https://git-scm.com/docs/git-checkout部分分离的头部)。实际上,这意味着您签出了一个提交,但没有与之关联的分支名称。

您可以选择只创建与提交相关联的新分支

gitbranch新的分支名称。

这允许您将当前状态保存在名为new branch name的新分支中,而不再处于分离的头部状态。

或者,如果您希望返回到以前的状态,则需要选择之前选择的分支

git结帐@{-1}